弾性検索を使用して、都市の人々を検索しています。だから私はプロパティを持っていますfirstname
、lastname
そしてcity
。
可能な検索語は、たとえば「Charlotte Renee Tucker」で、次の人を返す必要{firstname: "Charlotte Renee", lastname: "Tucker", city: "New York"}
が{firstname: "Renee", lastname: "Tucker", city: "Charlotte"}
あり{firstname: "Charlotte", lastname: "Tucker", city: "New Orleans"}
ます。
したがって、すべての用語は何らかのフィールドで発生する必要があります。最後の例では、「Renee」という単語は結果の一部ではないため、返されません。すべての単語が 1 つのプロパティで見つかった場合は問題ありません。たとえば、ファーストネームが「Charlotte Renee Tucker」の場合、有効な検索結果です。私のクエリは現在次のようになっています。
{
"bool": {
"should": [
{
"match": {
"lastname": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
},
{
"match": {
"firstname": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
},
{
"match": {
"city": {
"query": "Charlotte Renee Tucker",
"operator": "OR"
}
}
}
]
}
}
ただし、これは、1 つの単語だけが特定のプロパティに一致する人も返します。パラメータで遊んでminimum_should_match
みましたが、すべての単語が 1 つのプロパティで見つかった場合、これは機能しません。誰か助けてくれませんか?
これは私のマッピングです:
{
"people": {
"mappings": {
"properties": {
"city": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"firstname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"lastname": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
また、次のドキュメントを追加しました。
{"firstname": "Charlotte Renee", "lastname": "Tucker", "city": "New York"}
{"firstname": "Renee", "lastname": "Tucker", "city": "Charlotte"}
{"firstname": "Charlotte", "lastname": "Tucker", "city": "New Orleans"}
前述のクエリではすべてのドキュメントが見つかりましたが、「Renee」という単語が含まれていないため、最後のドキュメントを見つけたくありません。