検索目的で、elasticsearch (バージョン 6) で Web サイトの質問と回答をインデックス化するプロジェクトを行っています。
最初に、以下に示すように、質問用と回答用の 2 つのインデックスを作成することを考えました。
質問のマッピング:
{"mappings": {
"question": {
"properties": {
"title":{
"type":"text"
},
"question": {
"type": "text"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
回答のマッピング:
{"mappings": {
"answer": {
"properties": {
"answer":{
"type":"text"
},
"answerId": {
"type": "keyword"
},
"questionId":{
"type":"keyword"
}
}
}
}
}
multimatch クエリを term および top_hits 集計と共に使用して、インデックス付きの Q&A (参照された質問) を検索しました。この方法を使用して、検索結果から重複を削除しました。回答として、または同じ質問の質問自体が結果に表示される場合があります。結果の質問ごとに 1 つのエントリのみが必要です。私が直面している問題は、結果をページ付けすることです。Elasticsearch で集計をページ分割する方法はありません。集計ではなく、ヒットのみをページ分割できます。
次に、質問と回答の両方を1つのドキュメントに保存し、回答をJson配列に保存することを考えました。このアプローチの問題は、特定の質問ドキュメントで特定の回答を追加、削除、更新する明確な方法がないことです。私が見つけた唯一の方法は、グルーヴィーなスクリプトを使用することでした(参照された質問)。これはelasticsearch v6 AFAIKで廃止されました。
これを設計するためのより良いクリーンな方法はありますか? ありがとう。