跨多个字段的multi_match模糊查询

时间:2017-09-13 08:37:52

标签: elasticsearch fuzzy-search

我正在努力将'term'与多个字段(或_all字段)匹配 我想在cross_fields上进行模糊匹配,但不支持。 任何想法如何做或任何其他方式做到这一点?

query: {
  multi_match: {
    query: term,
    type: "cross_fields",
    fields: ['_all']
  }
}

在这里尝试解决方案时

ElasticSearch multi_match query over multiple fields with Fuzziness

我收到此错误

  

[parsing_exception]类型[cross_fields]不允许使用Fuziness   {line = 1& col = 128}

elasticsearch版本5.0

编辑: 这是我正在构建的查询

bool: {
       must: [
             {
             fuzzy: {
                     _all: term
                     }
             },
             {
             fuzzy: {
                    "location.country": country
                    }
             },
             {
             fuzzy: {
                    "location.city": city
                    }
             }
             ]
      }

1 个答案:

答案 0 :(得分:1)

cross_fields通过在多个字段中搜索字词来工作。由于cross_fields不支持模糊性,因此您必须以不同的方式编写查询。

一种可能是:用should实现你自己的“cross_fields”并在那里添加模糊性。

假设您的术语是:“term1 term2”,您可以按字边界(正则表达式\b)进行拆分,然后以这种形式进行划分:

{
   {
    "query": {
        "bool": {
            "should": [{
                    "match": {
                        "field1": "term",
                        "fuzziness": 1
                    }
                },{
                    "match": {
                        "field1": "term",
                        "fuzziness": 1
                    }
                },{
                    "match": {
                        "field2": "term1",
                        "fuzziness": 1
                    }
                },{
                    "match": {
                        "field2": "term12",
                        "fuzziness": 1
                    }
                }
            ]
        }
    }
}
}

如果您有许多字段,这可能不是最佳选择,查询将成为术语和字段的笛卡尔积。

重要提示您正在使用_all字段,这是一个字段。所有其他字段都被编入索引。也许你甚至不需要跨域?