查找具有模糊性的两个连接字段的匹配项

时间:2017-08-09 09:35:10

标签: elasticsearch

我正在尝试用他的姓名和姓氏搜索特定的人。我认为同时在两个字段中搜索的最佳选择是bool查询:

{
    "query":{
        "bool":{
            "must":[
                {"match": {"name":"Martin"}},
                {"match": {"surname":"Mcfly"}}
            ]
        }
}
}

但是bool查询似乎不支持模糊性。那么我该怎么办才能找到“Marty Mcfly”这个人,因为上述查询找不到这个匹配。如果有可能的话,我也很想找到像“Marty J. Mcfly”这样的人。

1 个答案:

答案 0 :(得分:1)

bool只是加入AND / OR / NOT / FILTER操作的包装器。

在您的情况下,使用multi_match查询是有意义的:

{
  "query":{
    "bool":{
      "must":[
        {
          "multi_match":{
            "query":"Marty J. Mcfly",
            "operator": "and",
            "fields":[
              "name",
              "surname"
            ]
          }
        }
      ]
    }
  }
}

这将搜索namesurname字段中的数据,并确保所有字词在两个字段中都必须匹配。

更新

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": {
              "query": "Martin",
              "operator": "and",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "surname": {
              "query": "Mcfly",
              "operator": "and",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}