Elasticsearch 分析2025年3月17日 | 阅读 8 分钟 分析是一个将文本转换为词元或术语的过程,例如,转换任何电子邮件的正文。这些词元被添加到倒排索引中以供后续搜索。因此,在搜索操作处理查询时,分析模块会分析索引中的可用数据。此分析模块包括分析器、分词器、字符过滤器和词元过滤器。 例如 - 句子:“一只敏捷的白猫跳过了棕色的狗。” 词元:[quick, white, cat, jump, brown, dog] 分析由分析器执行。它可以是内置分析器,也可以是自定义分析器。自定义分析器是根据索引定义的。如果未定义分析器,则默认情况下,内置分析器、过滤器、词元和分词器会注册到分析模块。分析是通过以下方式完成的: 我们将详细讨论其中的每一个。在此之前,我们从一个简单的例子开始。 示例 -让我们看一个简单的例子,我们将使用标准分析器来分析文本并将其转换为词元。这是在未指定任何内容时使用的默认分析器。它将分析句子并根据语法将它们分解为词元(单词)。 复制代码 响应 配置标准分析器标准分析器可以根据我们的需求进行配置。我们还可以配置其他分析器以满足我们的自定义需求。通过一个例子,可以更好地理解它。 - 首先,创建一个具有分析器的索引,并将max_token_length设置为配置标准分析器。
- 在 max_token_length 变量中提供值。我们将其设置为 7。
- 我们还将把标准分析器的名称修改为my_english_analyzer,它将在分析文本时使用。
- 请看下面给出的示例 -
复制代码 响应 配置标准分析器后分析文本创建具有修改后分析器的索引后,现在我们将使用分析器处理文本。在下面的示例中,您必须在查询字符串中提供索引名称(analysis_example),并在请求正文中提供分析器以及文本字符串。不要忘记提供 _analyze API。 复制代码 您注意到,在文本字符串中,elasticsearch 和 tutorial 分别有 13 和 8 个字符。因此,它们也将根据之前查询中指定的 maximum token length 进一步分解。 响应 不同类型的分析器有几种分析器,每种都有不同的功能。它们有助于根据需要实现不同的目标。以下是内置分析器及其描述列表: 序号 | 分析器 | 描述 |
---|
1 | 标准分析器(standard) | 在标准分析器中,可以修改 max_token_length 和 stopwords 设置。其中,默认的 max_token _length 为 255,stopwords 列表为空。如果未指定任何内容,它就是默认分析器。 | 2 | 简单分析器(simple) | 它由小写分词器组成。 | | 空格分析器(whitespace) | 它由空格分词器组成。 | | 停用词分析器(stop) | 在此分析器中,可以配置 stopwords 和 stopwords_path。默认情况下,stopword_path 包含停用词文本文件的路径,并且 stopwords 默认初始化为英语停用词。 | 4 | 关键字分析器(keyword) | 关键字分析器将整个流分析为一个单一的词元。例如,它可用于邮政编码。 | 5 | 模式分析器(pattern) | 顾名思义,此分析器处理正则表达式。在此分析器中,我们可以设置各种设置,如模式、小写、标志和停用词。 | 6 | 语言分析器 | 语言分析器允许用户处理印地语、英语、荷兰语、阿拉伯语等各种语言。 | 7 | Snowball 分析器(snowball) | Snowball 分析器使用标准分词器以及标准过滤器、snowball 过滤器、小写过滤器和停用词过滤器。 | 8 | 自定义分析器(custom) | 顾名思义,此分析器有助于创建自定义分析器,以及分词器和可选的词元过滤器和字符过滤器。在此分析器中,可以配置各种设置,如:filter、char_filter、tokenizer 和 position_increment_gap。 |
关键字分词器示例正如我们所讨论的,关键字分析器将整个流视为一个单一的词元。看看下面关键字分析器的例子。为此,我们不需要任何索引。我们只需要在 analyzer 字段中指定 analyzer 类型,并在 text 字段中指定 text 字符串。不要忘记在 API 列中传递 _analyze API。 复制代码 响应 截图  分词器在 elasticsearch 中,分词器用于从文本生成词元。分词器通过放置空格或其他标点符号来帮助将文本分解为词元。Elasticsearch 提供内置分词器,可以在自定义分析器中使用。下表是分词器及其描述: 序号 | 分词器 | 描述 |
---|
1 | 标准分词器(standard) | 此标准分词器基于基于语法的分词器构建。对于此分词器,可以配置 max_token_length。 | 2 | 边缘 N グラム 分词器(edgeNGram) | 此分词器允许我们设置不同的设置,如 min_gram、max_gram 和 token_chars。 | 3 | 关键字分词器(keyword) | Keyword 分词器将整个输入作为输出生成。我们可以为该分词器设置 buffer_size。 | 4 | 字母分词器(letter) | Letter 分词器捕获整个单词,直到遇到非字母字符。它会避免显示非字母数据。 | 5 | 小写分词器(lowercase) | Lowercase 分词器与 letter 分词器非常相似。唯一的区别是它在创建词元后将其转换为小写。 | 6 | N グラム 分词器 | 对于此分词器,我们可以设置一些设置,如 min_gram、max_gram 和 token_chars 设置。min_gram 的默认值为 1,max_gram 的默认值为 2。 | 7 | 空格分词器(whitespace) | 根据查询字符串中的空格,它会分割文本。 | 8 | 模式分词器(pattern) | 与模式分析器类似,它也使用正则表达式作为词元分隔符。我们可以为该分词器设置 pattern、group 和 flag 设置。 | 9 | 经典分词器 | 由于它是一个经典分词器,它只是根据语法将查询字符串分解为词元。我们可以为该分词器设置 max_token_length。它作用于基于语法的词元。 | 10 | UAX 电子邮件 URL 分词器(uax_url_email) | 此分词器与标准分词器的工作方式相同,但它们之间也有区别。UAX Email URL 分词器将电子邮件和 URL 视为单个词元。 | 11 | 路径分层分词器(path_hieharchy) | 此分词器有助于生成输入目录路径中所有可能的路径。此分词器有一些可用的设置,它们是:replacement_buffer_size(默认为 1024)、reverse(默认为 false)、delimiter(默认为 /)和 skip(默认为 0)。 | 12 | 泰语分词器 | 泰语分词器基本上是为泰语设计的,它使用内置的泰语分割算法。 |
现在,让我们看一个分词器如何工作的例子。在下面的例子中,分词器将在遇到非字母字符时将文本分解为词元。它还将所有词元转换为小写。请看下面的例子: 小写分词器示例复制代码 响应 请注意,在上面的响应中,所有大写字母都转换为小写,并且 elasticsearch 没有打印数字(非字母)值,即 2。但它为其保留了空间,例如在非字母字符之前的一个空间,在非字母字符结束时的一个空间,以及它本身的一个空间。截图  经典分词器示例在此示例中,我们将在 API 部分传递 _analyze API,并在 “tokenizer” 变量中指定分词器名称。最后,我们需要提供一个文本字符串来分解文本。 复制代码 响应 在下面的响应中,您可以看到文本流被分为词元,类型为字母数字,这意味着字母和数字值都将被显示。与小写分词器一样,这里的词元不会转换为小写,并且数字值也会在响应中显示。 截图  同样,通过在 tokenizer 字段中传递它们的名称,并在 text 字符串中传递文本,我们可以获得另一个分词器的结果。 词元过滤器- Elasticsearch 提供内置的词元过滤器,它们从分词器接收输入。
- 接收输入后,这些过滤器可以添加、修改和删除输入中的文本。
- 我们已经在上一节中解释了大多数词元过滤器。
字符过滤器- 字符过滤器在分词器之前处理文本。
- 它会查找指定的模式、特殊字符或 HTML 标签,然后删除或将其更改为适当的单词,例如将 & 更改为 and,删除 HTML 标记。
|