Elasticsearch 中的 Token Filter 是如何工作的?

Sherwin.Wei Lv8

Elasticsearch 中的 Token Filter 是如何工作的?

回答重点

Elasticsearch 中的 Token Filter 是一种用于修改、分析或通过某些规则过滤令牌(Token)的机制。它们在分词过程中发挥重要作用,负责将分词器生成的初始令牌进一步处理,以符合特定需求。

扩展知识

1)Token Filter 的应用
在实际应用中,Token Filter 可以用来执行以下任务:

  • 转换大小写:将所有的词汇转换为小写(Lowercase Token Filter),这可以有效地提高搜索的匹配度,因为搜索查询一般情况下不区分大小写。
  • 去除停用词:移除诸如 “the”, “is”, “at” 等常见但无实际意义的词汇(Stop Token Filter),从而提高搜索效率。
  • 同义词处理:将一个词将替换为它的同义词(Synonym Token Filter),增加文本匹配的灵活性。
  • 词干提取:将词汇还原到其词根形式(Stemmer Token Filter),比如将 “running” 变为 “run”,有助于更广泛地匹配搜索内容。

2)工作流程
在 Elasticsearch 中,文本分析通常被分为三个主要步骤:字符过滤(Character Filter)、分词(Tokenizer)和令牌过滤(Token Filter)。整个流程如下:

  • 字符过滤:首先,字符过滤器可以处理原始文本,如去掉 HTML 标签。
  • 分词:接着,分词器会将处理后的文本切分成多个基本的词汇单元,即令牌(Token)。
  • 令牌过滤:然后,Token Filter 对这些令牌进行进一步的处理,如去除停用词、规范化大小写、同义词扩展等。

示例:假设输入文本是 “The quick brown fox jumps over the lazy dog.”

  • 字符过滤:无变化。
  • 分词:生成的令牌为 [“The”, “quick”, “brown”, “fox”, “jumps”, “over”, “the”, “lazy”, “dog”]。
  • Token Filter:通过一系列过滤处理后,可能得到 [“quick”, “brown”, “fox”, “jump”, “over”, “lazy”, “dog”],其中移除了 “the” 等停用词,并将 “jumps” 变为 “jump”。

3)常见的 Token Filter 类型

  • Lowercase Token Filter:将所有令牌转换为小写。
  • Stop Token Filter:移除停用词。
  • Edge NGram Token Filter:生成词的前缀子字符串。
  • Synonym Token Filter:处理同义词。
  • Stemmer Token Filter:进行词干提取。

这些过滤器可以相互组合使用,以充分满足实际需求。例如,在进行一个英文文本索引时,可能会选择 Lowercase Token Filter 结合 Stop Token Filter 和 Stemming Token Filter。

4)配置 Token Filter
在 Elasticsearch 中,你可以通过自定义分析器来配置 Token Filter。一个简单的配置示例如下:

1
2
3
4
5
6
7
8
9
10
11
{
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "stop", "porter_stem"]
}
}
}
}

在这个例子中,我们定义了一个名为 “my_custom_analyzer” 的分析器,它使用标准分词器 ‘standard’,并且应用了三个 Token Filter:”lowercase”、”stop” 和 “porter_stem”。

Comments
On this page
Elasticsearch 中的 Token Filter 是如何工作的?