首页 > 解决方案 > 带有破折号(或其他符号)的弹性多重匹配字符串

问题描述

我正在尝试在我的弹性查询中匹配破折号(和其他符号)。

使用默认空白分析器对所有字段进行模糊搜索。

我的查询:

function_score: {
        query: {
            multi_match: {
                query: string
                analyzer: "whitespace",
                fuzziness: 1
            }
        }
    }

然而,这对破折号字符产生了意想不到的结果。前中央公园不适用于此。或者

只有当我使用短语匹配并去掉双引号时,破折号才能正常工作。但是没有模糊性。

有谁知道我怎样才能用破折号正常获得模糊搜索?

标签: elasticsearchsearchsymbolshyphenfuzzy

解决方案


添加具有索引映射、索引数据、搜索查询和搜索结果的工作示例

索引映射:

{
  "mappings": {
    "properties": {
      "place": {
        "type": "text",
        "analyzer":"whitespace"
      }
    }
  }
}

指数数据:

{
  "place": "Cwntral-Park"
}
{
  "place": "Central-Park"
}
{
  "place": "Central-Area"
}

搜索查询:

{
  "query": {
    "bool": {
      "should": {
        "match": {
          "place": {
            "query": "Central-Park",
            "fuzziness": 1
          }
        }
      }
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "65605120",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.9808291,
        "_source": {
          "place": "Central-Park"
        }
      },
      {
        "_index": "65605120",
        "_type": "_doc",
        "_id": "3",
        "_score": 0.8990934,
        "_source": {
          "place": "Cwntral-Park"
        }
      }
    ]

推荐阅读