私は ElasticSearch を使用していますが、ファセットを使用して結果の統計情報、より具体的には、結果で最も言及されている人を取得できるかどうか疑問に思っています。その情報を含むフィールドが既にあります。しかし現在、ファセットの結果は、複数の単語でグループ化したいときに、そのフィールドのデータを用語ごとに分割しています。
つまり、ユーザーが John を検索した場合、次のようなデータを取得したいと考えています。
{
[...]
"facets" : {
"topPeople" : {
"_type" : "terms",
"missing" : 0,
"total" : 1739884,
"other" : 1705319,
"terms" : [ {
"term" : "John Smith",
"count" : 13954
}, {
"term" : "John Snow",
"count" : 1432
}, {
"term" : "John Baird",
"count" : 770
}]
}
}
代わりに、ElasticSearch は結果を用語ごとに分割し、次のようなものを返します。
{
[...]
"facets" : {
"topPeople" : {
"_type" : "terms",
"missing" : 0,
"total" : 1739884,
"other" : 1705319,
"terms" : [ {
"term" : "John",
"count" : 1739884
}, {
"term" : "Smith",
"count" : 13954
}, {
"term" : "Snow",
"count" : 1432
}]
}
}
インデックスを分析しないように設定すると、ElasticSearch は単語の完全な文字列を返す必要があることをどこかで読みました。ただし、ユーザーがフィールドで検索できるようにしたいです。フィールドを複製して分析されていないフィールドを持つことは避けたいと思います。ElasticSearch でフィールドごとにグループ化する方法はありますか?
現在、次のファセット クエリを使用しています。
{
"query" : {
[...]
},
"facets" : {
"topPeople" : {
"terms" : {
"field" : "people",
"size" : 3
}
}
}
}