これらの検索クエリをElasticsearchフィルタに変換するには、薄層ロジックが必要になると思います。これよりも優れた解決策があるかもしれません(私は分析フィールドとLuceneであまり働かない)が、これは私の心に来るものです。
第1のオプションは、それほど多くない31k文書を作成する1つの文書/詩を作成することです。これは照会する最も簡単なデータモデルです。
新約聖書には、旧約聖書には23,145節、 には7,957節があります。これは、あなたは、他のオプションは、ネストされた文書として詩を格納することです31102の詩
{
"book": "Luke"
"chapter": 1,
"verse": 13,
"contents": "But the angel said to him: Do not be afraid, Zechariah; your prayer has been heard. Your wife Elizabeth will bear you a son, and you are to call him John."
}
(私はそれがまた、ESのマッピングのキーワードであるとしてフィールドが"text"
と呼ばれた嫌い。)
の合計を与えます「1つの文書/章を取得するd次の
{
"book": "Luke"
"chapter": 1,
"verses": [
{
"verse": 12,
"contents": "..."
},
{
"verse": 13,
"contents": "But the angel said to him: Do not be afraid, Zechariah; your prayer has been heard. Your wife Elizabeth will bear you a son, and you are to call him John."
},
{
"verse": 14,
"contents": "..."
}
]
}
第三の選択肢は一つの文書/本を持っていることです。
{
"book": "Luke"
"verses": [
{
"chapter": 1,
"verse": 12,
"contents": "..."
},
{
"chapter": 1,
"verse": 13,
"contents": "But the angel said to him: Do not be afraid, Zechariah; your prayer has been heard. Your wife Elizabeth will bear you a son, and you are to call him John."
},
{
"chapter": 1,
"verse": 14,
"contents": "..."
}
]
}
実際にはネストされたドキュメントもドキュメントとしてカウントされ、"book"
フィールドはルートドキュメントと共有するだけなので、ネストしてもほとんど得られません。だから私はオプション#1に行くだろう。
ES/Luceneがこのようなテキストのタグ付け部分をサポートしているかどうかはわかりませんが、ドキュメント/ブックは1つしかありません。ページ番号を保存することも同様の問題で、人々は1つのドキュメント/ページを保存するように提案しました。
アップデート:私は、有効なquery stringクエリを構築することができると思いKibanaの私の使用状況に基づいて
:
{
"query": {
"query_string" : {
"query" : "book:\"Luke\" AND chapter:3 AND verse:[5 TO 13]",
"use_dis_max" : false
}
}
}
私の理解dis_maxで唯一の「検索」(得点とランキングに関連しています)コンテキストであるが、ここでは完全一致をフィルタリングしているので、false
に設定することができる。
どのようにデータモデルを弾力性のあるようにモデル化していますか?あなたはいくつかのモデルを共有できますか? – user3775217
@ user3775217まだ分かりませんが、それは質問の一部です – Webnet