1

弾性検索を使用して、都市の人々を検索しています。だから私はプロパティを持っていますfirstnamelastnameそして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」という単語が含まれていないため、最後のドキュメントを見つけたくありません。

4

1 に答える 1