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
轻松处理
如何告诉 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
轻松处理