使用ElasticSearch查询字符串匹配多个字段

8fq7wneg  于 2023-04-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(182)

我是ElasticSearch的新手,我有以下格式的数据:

{
  "person_name" : "Abraham Benjamin deVilliers",
  "name": "Abraham",
  "office":{
     "name":"my_office"
  }
},
{
  "person_name" : "John Bradshaw",
  "name": "john",
  "office": {
     "name":"Abraham deVilliers"
  }
},
{
  "person_name" : "John Bradshaw",
  "name": "Abraham deVilliers",
  "office": {
     "name":"blabla"
  }
},
{
  "person_name" : "John Bradshaw",
  "name": "Abraham",
  "office": {
     "name":"deVilliers"
  }
},
{
  "person_name" : "Abraham",
  "name": "deVilliers",
  "office": {
     "name":"blabla"
  }
}

我正在进行搜索查询,以匹配具有三个字段person_namenameoffice.name的字符串,它应该通过检查用户输入的查询字段返回响应,如下所示:
如果输入的查询字符串是Abraham deVilliers,那么它应该返回同时拥有AbrahamdeVilliers作为其person_namenameoffice.name的一部分的用户,如下所示:

{
      "person_name" : "Abraham Benjamin deVilliers",
      "name": "Abraham",
      "office":{
         "name":"my_office"
      }
    },
    {
      "person_name" : "John Bradshaw",
      "name": "john",
      "office": {
         "name":"Abraham deVilliers"
      }
    },
    {
      "person_name" : "John Bradshaw",
      "name": "Abraham deVilliers",
      "office": {
         "name":"blabla"
      }
    }

我已经尝试了query_string搜索查询的ElasticSearch如下:

{
    "query": {
        "query_string":
          {   "fields": ["person_name", "name", "office.name"],
              "query": "Abraham AND deVilliers"
          }
    }
}

搜索查询返回预期的结果,但它也返回匹配first_name: Abrahamnamelast_name: deVilliersoffice.name,我不想要的响应。
我想从query_string查询返回的配置文件中排除以下配置文件

{
      "person_name" : "John Bradshaw",
      "name": "Abraham",
      "office": {
         "name":"deVilliers"
      }
    },
    {
      "person_name" : "Abraham",
      "name": "deVilliers",
      "office": {
         "name":"blabla"
      }
    }
olqngx59

olqngx591#

这是一个多匹配查询的作业,请尝试以下操作:

GET <index_name>/_search?explain=true
{
  "query": {
    "multi_match" : {
      "query":      "Abraham deVilliers",
      "type":       "best_fields",
      "fields":     [ "person_name", "name", "office.name" ],
      "operator":"and"
    }
  }
}

相关问题