我正在看tokenizer
Elasticsearch 6.8。我知道它定义了我们在构建索引时如何将文本标记为单词。例如,它将转换为“Quick brown fox!” 文本成术语[Quick, brown, fox!]
。如果我在 Elasticsearch 中有一个包含 text 的字段"Quick brown fox!"
,它将在索引中分成三个单词。但是,如果我发送一个查询文本"Quick brown fox!"
,tokenizer
该查询参数也适用吗?
问问题
938 次
2 回答
1
只要在索引的字段映射中正确配置分析器,它们就可以在索引时和查询时工作。
在此页面上,您可以获得分析器何时启动的完整描述,为清楚起见,在下面重复:
在索引时,Elasticsearch 将按以下顺序查找分析器:
- 在字段映射中定义的分析器。
- 索引设置中名为 default 的分析器。
- 标准分析仪。
在查询时,还有几层:
- 在全文查询中定义的分析器。
- 在字段映射中定义的 search_analyzer。
- 在字段映射中定义的分析器。
- 索引设置中名为 default_search 的分析器。
- 索引设置中名为 default 的分析器。
- 标准分析仪。
如您所见,在您摄取数据和查询数据时都可以使用分析器。
于 2020-01-23T07:25:26.757 回答
1
您还可以验证您的搜索词是否是分词器,您还可以检查从搜索查询生成的令牌。因为它取决于各种因素,如查询类型、分析查询与非分析查询。
匹配查询是分析查询的一个示例,其中提供的文本在匹配之前进行分析。而术语查询是非分析查询的一个示例,其中提供的搜索文本未按原样进行分析和发送以进行搜索。
要检查搜索查询生成的令牌,请使用Explain API,它返回有关特定文档为何匹配(或不匹配)查询的信息。在此查询的输出中,您将能够检查为您的搜索词生成的标记。
下面是解释 API 输出的示例片段,它显示了 Elasticsearch 基于各种因素生成的搜索词令牌。
"description": "weight(to:Foo in 0) [PerFieldSimilarity], result of:",
此 API 是检查 ES 生成的最终令牌的最快方法,这些令牌用于令牌到令牌的匹配。
于 2020-01-24T02:11:25.873 回答