0

我正在看tokenizerElasticsearch 6.8。我知道它定义了我们在构建索引时如何将文本标记为单词。例如,它将转换为“Quick brown fox!” 文本成术语[Quick, brown, fox!]。如果我在 Elasticsearch 中有一个包含 text 的字段"Quick brown fox!",它将在索引中分成三个单词。但是,如果我发送一个查询文本"Quick brown fox!"tokenizer该查询参数也适用吗?

4

2 回答 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 回答