【问题标题】:Finding matches for two connected fields with fuzziness模糊地查找两个连接字段的匹配项
【发布时间】:2017-08-09 20:52:50
【问题描述】:

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

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

但布尔查询似乎不支持模糊性。那么我该怎么做才能找到人 “Marty Mcfly”,因为上述查询未找到此匹配项。如果可能的话,我也希望能够找到像 “Marty J. Mcfly” 这样的人。

【问题讨论】:

    标签: elasticsearch


    【解决方案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
                }
              }
            }
          ]
        }
      }
    }
    

    【讨论】:

    • 但是这个解决方案只是在两个字段中搜索“Marty J. Mcfly”,因此不会给我结果。我需要一些东西来查找名称中“Marty”和姓氏中“Mcfly”的所有相似名称。输出应显示同一实体的这两个字段。
    • match 查询支持fuzziness 选项,将其添加到您的查询中应该可以实现您想要的。
    • 这可能会包含正确的匹配,但也会导致大量误报结果,因为此查询会在姓名字段中搜索姓氏,并在姓氏字段中搜索姓名。例如,我模糊地搜索“Martin Donovan”,结果收到了“Barbara Marti-Donovan”。
    • 啊哈,所以您的原始查询应该没问题,只需将模糊性作为参数添加到每个匹配查询。
    • 由于某种原因,布尔查询似乎不支持模糊性。这是我的主要问题。如果有办法将它们结合起来,我很想听听。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多