私の弾性検索インデックスには、同じ位置に複数のトークンを持つドキュメントがあります。弾性検索:すべての位置に一度だけ一致します
すべての位置で少なくとも1つのトークンが一致したときにドキュメントを取得したいと考えています。 トークンの順序は重要ではありません。 これをどのように達成できますか?私はElasticsearch 0.90.5を使用します。
例:
Iインデックス、このような文書。
{
"field":"red car"
}
私は、元のトークンと同じ位置に同義語を追加する同義語トークンフィルタを使用します。
- ポジション1:
- "赤" のポジション2: "車"、 "自動車"
今の私のソリューション: は、だから今分野では、2箇所があります
すべての位置が確実に一致するように、私は最大位置もインデックス化します。
{
"field":"red car",
"max_position": 2
}
IはDefaultSimilarityから延び、(1つのTFを返すカスタム類似性を有する)、IDF()とlengthNorm()。得られたスコアは、フィールド内の一致する用語の数です。
問合せ:私の解決策と
{
"custom_score": {
"query": {
"match": {
"field": "a car is an automobile"
}
},
"_script": "_score*100/doc[\"max_position\"]+_score"
},
"min_score":"100"
}
問題:クエリ文字列にはトークン「赤」が存在しないため
上記の検索では、ドキュメントにマッチしてはなりません。しかし、Elasticsearchは車と自動車の試合を2試合でカウントし、スコアが2になるため、102のスクリプトスコアが得られ、「min_score」を満たしているため一致します。