ElasticSearchを使用して、フォーラムスレッドのインデックスを作成し、投稿に返信しています。各投稿には、日付フィールドが関連付けられています。日付範囲に一致する投稿を含むスレッドを返す日付範囲を含むクエリを実行したいと思います。ネストされたマッピングを使用することを検討しましたが、ドキュメントによると、この機能は実験的なものであり、不正確な結果につながる可能性があります。
これを達成するための最良の方法は何ですか?私はJavaAPIを使用しています。
ElasticSearchを使用して、フォーラムスレッドのインデックスを作成し、投稿に返信しています。各投稿には、日付フィールドが関連付けられています。日付範囲に一致する投稿を含むスレッドを返す日付範囲を含むクエリを実行したいと思います。ネストされたマッピングを使用することを検討しましたが、ドキュメントによると、この機能は実験的なものであり、不正確な結果につながる可能性があります。
これを達成するための最良の方法は何ですか?私はJavaAPIを使用しています。
データ構造についてはあまり説明していませんが、質問から、フィールドとおそらくフィールドpostを含むオブジェクトがあると推測しています。つまり、投稿がどのスレッドに属しているかを特定する方法はありますか?datethread_id
threadオブジェクトもありますか、それともthread_id十分ですか?
いずれにせよ、あなたが述べた目標は、特定の日付範囲に投稿があるスレッドのリストを返すことです。thread_idこれは、スレッドをグループ化する必要があることを意味します(日付範囲内の投稿ごとに同じものを複数回返すのではなく)。
このグループ化は、ファセットを使用して実行できます。
したがって、JSONのクエリは次のようになります。
curl -XGET 'http://127.0.0.1:9200/posts/post/_search?pretty=1&search_type=count' -d '
{
"facets" : {
"thread_id" : {
"terms" : {
"size" : 20,
"field" : "thread_id"
}
}
},
"query" : {
"filtered" : {
"query" : {
"text" : {
"content" : "any keywords to match"
}
},
"filter" : {
"numeric_range" : {
"date" : {
"lt" : "2011-02-01",
"gte" : "2011-01-01"
}
}
}
}
}
}
'
ノート:
search_type=count実際に投稿を返したくないので使用していthread_idます。thread_idのs(size: 20)が必要であることを指定しました。デフォルトは10になりますnumeric_rangeため、フィールドにaを使用しているため、この状況でのパフォーマンスが向上します。datenumeric_rangerangethread_idのように見える場合how-to-perform-a-date-range-elasticsearch-queryは、これらの値を直接使用できます。ただし、別のthreadオブジェクトがある場合は、multi- getAPIを使用してこれらを取得できますthread_idにマッピングする必要があります{ "index": "not_analyzed" }