分析にElasticSearchを使用しようとしています。具体的には、手巻きのRailsCMSの「トップコンテンツ」を追跡するためです。要件は、コンテンツごとにカウンターを保持するよりもかなり複雑です。基本的なことすらうまくいかないように見えるので、今は問題の深さについては触れません。
私の問題はこれです:私はファセットを使用していますが、カウントは私が期待するものではありません。例えば:
クエリ:
{"facets":{"el_ids":{"terms":{"field":"el_id","size":1,"all_terms":false,"order":"count"}}}}
結果:
{"el_ids":{"_type":"terms","missing":0,"total":16672,"other":16657,"terms":[{"term":"quis","count":15}]}}
わかりました。IDが「quis」のコンテンツは15回ヒットしました。これorder
はcount
、であるため、私の一番上のコンテンツになるはずです。次に、上位5つのコンテンツを取得しましょう。
クエリ:
{"facets":{"el_ids":{"terms":{"field":"el_id","size":5,"all_terms":false,"order":"count"}}}}
結果(ファセットのみ):
[
{"term":"qgz9","count":26},
{"term":"quis","count":15},
{"term":"hnqn","count":15},
{"term":"higp","count":15},
{"term":"csns","count":15}
]
は?では、IDが「qgz9」のコンテンツのヒット数は26でしたか?最初のクエリで上位の結果にならなかったのはなぜですか?
では、トップ100を取得しましょう。
クエリ:
{"facets":{"el_ids":{"terms":{"field":"el_id","size":100,"all_terms":false,"order":"count"}}}}
結果(ファセットのみ):
[
{"term":"qgz9","count":43},
{"term":"difc","count":37},
{"term":"zryp","count":31},
{"term":"u65r","count":31},
{"term":"sxsi","count":31},
...
]
では、「qgz9」のヒット数は26ではなく43ですか?どうしてそれができるのでしょうか?インデックスを変更するバックグラウンドでは何も起こらないことを保証できます。これらのクエリを繰り返すと、同じ結果が得られます。
結果サイズを増やすこのプロセスを繰り返すと、カウントは変化し続け、新しいコンテンツIDが一番上に表示されます。誰かが私が間違っていることや、これがどのように機能するかについての私の理解に欠陥があることを私に説明できますか?