我正在Elasticsearch 6.8中查看tokenizer
。我知道它定义了我们在建立索引时如何将文本标记为单词。例如,它将把“ Quick brown fox!”文本转换为术语[Quick, brown, fox!]
。如果我在Elasticsearch中有一个文本为"Quick brown fox!"
的字段,它将在索引中分为三个词。但是,如果我发送查询文本"Quick brown fox!"
,tokenizer
也适用于该查询参数怎么办?
只要在索引的字段映射中正确配置了分析程序,分析程序就可以在建立索引时间和查询时间工作。
On this page,您将获得有关分析仪启动时间的完整描述,为清楚起见,以下重复说明:
在索引时间,Elasticsearch将按以下顺序查找分析器:
- 分析器在字段映射中定义。
- 在索引设置中名为默认值的分析器。
- 标准分析仪。
在查询时,还有更多层:
- 在全文查询中定义的分析器。
- 在字段映射中定义的search_analyzer。
- 在字段映射中定义的分析器。
- 在索引设置中名为default_search的分析器。
- 在索引设置中名为默认值的分析器。
- 标准分析仪。
因此,您可以在提取数据和查询数据时利用分析器。
您还可以验证您的搜索词是否是标记词,也可以检查从搜索查询中生成的标记。由于它取决于各种因素,例如查询类型,已分析查询还是未分析查询。
Match queries是分析查询的示例,其中在匹配之前分析提供的文本。 term query是未经分析的查询的示例,其中提供的搜索文本未按原样进行分析和发送以进行搜索。
用于检查由搜索查询生成的令牌,请使用Explain API,该C <在此查询的输出中,您将能够检查为您的搜索词生成的令牌。
下面是来自explain API的输出的示例片段,该片段显示了Elasticsearch基于各种因素生成的搜索词标记。"description": "weight(to:Foo in 0) [PerFieldSimilarity], result of:",
此API是检查ES生成的最终令牌的最快方法,该令牌用于令牌与令牌的匹配。