Elasticsearch:使用特殊字符打开和关闭括号进行搜索

Elasticsearch : Search with special character Open & Close parentheses

您好,我正在尝试在弹性搜索中搜索其中包含这些字符“(”、“)”的单词。我无法获得预期的结果。

这是我正在使用的查询

{
"query": {
    "query_string" : {
        "default_field" : "name",
        "query" : "\(Pas\)ta\""
    }
}}

在结果中,我首先获得 "PASTORS"、"PAST"、"PASCAL"、"PASSION" 的记录。 我想在搜索结果的第一条记录中获取名称 'Pizza & (Pas)ta',因为它是最佳匹配项

这是模式中名称字段的分析器

"analysis": {
  "filter": {
    "autocomplete_filter": {
      "type": "edge_ngram",
      "min_gram": "1",
      "max_gram": "20"
    }
  },
  "analyzer": {
    "autocomplete": {
      "type": "custom",
      "tokenizer": "standard",
      "filter": [
        "lowercase",
        "autocomplete_filter"
      ]
    }
  }

 "name": {
        "analyzer": "autocomplete",
        "search_analyzer": "standard",
        "type": "string"
   },

请帮我解决这个问题,谢谢

您使用了 standard 分词器,它正在从生成的分词中删除 ()。而不是获取令牌 (pas)ta 生成的令牌之一是 pasta 因此您无法匹配 (pas)ta.

您可以使用 whitespace 分词器,而不是使用 standard 分词器,它将保留名称中的所有特殊字符。将分析器定义更改为以下内容:

  "analyzer": {
    "autocomplete": {
      "type": "custom",
      "tokenizer": "whitespace",
      "filter": [
        "lowercase",
        "autocomplete_filter"
      ]
    }
  }