Elasticsearch - 选择用于字段的分析器

Elasticsearch - Choosing the analyzer to use for fields

如何告诉 query_string 在搜索中使用哪个分析器?

我用这样的分析器创建了我的索引:

"analysis": {
  "analyzer": {
    "std_analyzer": {
      "tokenizer": "whitespace",
      "filter": [ "stemmer" ]
    }
  }
}

我没有预定义任何映射。相反,我依靠映射在插入文档时动态添加。

调用 /my_index/_mapping

后映射显示如下
      "short_bio" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },

当动态添加字段时,您会看到映射中没有定义分析器。

这是否意味着搜索将自动使用使用索引 (std_analyzer) 创建的分析器?或者是否使用了其他分析仪?我如何强制它使用我想要的分析器?

如果相关,我正在使用 query_string 进行搜索以利用 AND/OR/NOT/grouping

谢谢!

请参考 official docs

查询字符串分析器的解释

(Optional, string) Analyzer used to convert text in the query string into tokens. Defaults to the index-time analyzer mapped for the default_field. If no analyzer is mapped, the index’s default analyzer is used.

这意味着在您的情况下,由于您没有定义任何显式分析器,查询字符串将对文本字段使用标准分析器,对 keyword 字段使用关键字 aka 空操作分析器。

也不要与 index 的默认分析器混淆,您可以通过以下 this 官方 link.

来简单地检查一下

此外,如文档中所述,查询字符串 returns 语法无效的错误和 AND/OR/NOT 的用例可以通过 preferred boolean query

轻松处理