【问题标题】:Elasticsearch - Choosing the analyzer to use for fieldsElasticsearch - 选择用于字段的分析器
【发布时间】:2021-04-10 22:04:22
【问题描述】:

我如何告诉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

谢谢!

【问题讨论】:

    标签: elasticsearch search elasticsearch-dsl


    【解决方案1】:

    请参考official docs中查询字符串的分析器说明

    (可选,字符串)用于转换查询字符串中的文本的分析器 成令牌。默认为映射的索引时间分析器 默认字段。如果没有映射分析器,则索引的默认分析器 被使用了。

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

    也不要与 index 的默认分析器混淆,您可以通过 this 官方链接进行检查。

    同样如文档中所述,查询字符串会返回无效语法错误,并且您的 AND/OR/NOT 用例可以由首选 boolean query 轻松处理

    【讨论】:

    • @Elasticsearch_Ninja 再次感谢您!正是我想要的!感谢您对布尔查询的引用。我去看看
    • @Ricky 很高兴它有帮助 :) 并感谢您的支持和接受答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多