Elasticsearch wildcard搜索


本文针对Elasticsearch 6.1版本。

Wildcard 搜索

类似于MySQL的模糊搜索,适用于string类型,占位符有两个:

  • ?:匹配一个字符;
  • *:匹配多个字符。

查询时用wildcard关键字搜索,如:

{
  "query": {
    "bool": {
      "must": [
        {
          "wildcard": {
            "title": "Z*"
          }
        }
      ]
    }
  }
}

禁止分词

Elasticsearch搜索时会对文档搜索词进行分词,有时这不符合我们的需求,因为分词以后搜出来的结果可能多了或者少了,一些特殊的符号比如标点符号也会搜不到了。

  • 禁止文档分词:设置文档的字段类型为keyword
  • 禁止搜索词分词:在字段名后面加上.keyword,如上文把title改为title.keyword

注意

在搜索词前面加?*,会导致搜索的效率降低。

参考

wildcard-query-field-params

keyword

analysis-keyword-analyzer

normalizer

wild-card-queries-do-not-work-after-normalization