私は少数の著者に属するドキュメントのコレクションを持っています:
[
{ id: 1, author_id: 'mark', content: [...] },
{ id: 2, author_id: 'pierre', content: [...] },
{ id: 3, author_id: 'pierre', content: [...] },
{ id: 4, author_id: 'mark', content: [...] },
{ id: 5, author_id: 'william', content: [...] },
...
]
著者のIDに基づいて、最も一致するドキュメントの個別の選択を取得してページ付けしたいと思います。
[
{ id: 1, author_id: 'mark', content: [...], _score: 100 },
{ id: 3, author_id: 'pierre', content: [...], _score: 90 },
{ id: 5, author_id: 'william', content: [...], _score: 80 },
...
]
これが私が現在行っていることです(擬似コード):
unique_docs = res.results.to_a.uniq{ |doc| doc.author_id }
問題はページ付けにあります:20の「異なる」ドキュメントを選択する方法は?
一部の人々は用語ファセットを指していますが、私は実際にはタグクラウドを行っていません:
ありがとう、
Adit
現在、ElasticSearchはgroup_byに相当するものを提供していないため、手動で実行しようとしています。
ESコミュニティがこの問題(おそらくプラグイン)の直接的な解決策に取り組んでいる間、これが私のニーズに合った基本的な試みです。
仮定。
関連するコンテンツを探しています
最初の300のドキュメントが関連していると想定したので、これらの多くまたは一部が同じ少数の著者からのものであるかどうかに関係なく、私の研究をこの選択に限定することを検討します。
私のニーズのために、私は「本当に」完全なページ付けを必要としませんでした、それはajaxを通して更新された「もっと見る」ボタンで十分でした。
欠点
毎回300のドキュメントを取得するため、結果は正確ではありません。一意のドキュメントがいくつ出てくるかわかりません(同じ作成者からの300のドキュメントである可能性があります)。作成者あたりのドキュメントの平均数に適合するかどうかを理解し、おそらく制限を検討する必要があります。
2つのクエリを実行する必要があります(リモート通話のコストを待機しています):
これがいくつかのルビー擬似コードです:https://gist.github.com/saxxi/6495116
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加