インデックスに次のようなドキュメントがあります。
{
"field" : "a, b, c, d, e"
}
フィールド値は、配列から文字列への関数によって作成された文字列です。したがって、すべてのドキュメントが同じ文字列を持つわけではありませんが、すべてのドキュメントには少なくとも"a, b"
as 値があります。
ここで、2 種類のドキュメントに一致するクエリが必要です。
フィールド値として(正確に) のみを持つドキュメント"a, b"
、またはフィールドに少なくとも 2 つの検索語を含むドキュメント。
基本的に私の問題は、フィールドが分析されると最初の条件を満たせず、フィールドが分析されない場合は2番目の条件を満たさないことです。フィールドをnot_alanyzedとして複製しない解決策はありますか?
フィールドを分析されていないフィールド (コード例 field1) に複製すると、このクエリを使用できます。このクエリは達成するには複雑すぎるように感じます...:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"or": [
{
"term": {
"field1": "a, b"
}
},
{
"and": [
{
"term": {
"field": "c"
}
},
{
"term": {
"field1": "d"
}
}
]
}
]
}
}
}
}