首页 > 解决方案 > Elasticsearch 中的 Analyzer 有什么用?

问题描述

我在理解弹性搜索分析器时遇到了一些问题。它的用途和使用方法是什么?

这篇文章中,有一个来自源文本的分词器和分词过滤器。我无法理解源文本是来自 URL 还是来自索引内的文本?从文章中,它说要执行“GET

http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball "

哪个来自 URL,但是此分析器是否与搜索我的索引中的文本有关?

如果我的问题听起来很愚蠢,我很困惑和抱歉。

标签: elasticsearch

解决方案


Analyzer是一个包装器,它包装了三个函数:

  • 字符过滤器主要用于去除一些不使用的字符或改变一些字符。
  • Tokenizer将文本分解为单个标记(或单词),并根据某些因素(空格、ngram 等)进行。
  • 令牌过滤器它接收令牌,然后应用一些过滤器(例如将大写术语更改为小写)。

简而言之,分析器用于告诉 elasticsearch 如何索引和搜索文本。

您正在研究的是分析 API,这是一个非常好的工具,可以了解分析器的工作原理。文本提供给此 API,与索引无关。

在您的情况下,GET 请求

GET http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball

相当于:

GET _analyze
{
  "analyzer" : "snowball",
  "text" : "I sing he sings they are singing"
}

输出:

{
  "tokens": [
    {"token": "i", "position": 1, ...},
    {"token": "sing", "position": 2, ...},
    {"token": "he", "position": 3, ...},
    {"token": "sing", "position": 4, ...},
    {"token": "sing", "position": 7, ...},
  ]
}

文章中所述。

还有一件事,假设您在索引中定义了一个自定义分析器,它以您自己的方式执行字符过滤、标记化和标记过滤的组合,并且您想检查它将如何标记文本,那么您可以使用_analyze索引名称的终点,即使在这种情况下,您也必须提供文本。

GET my_index/_analyze
{
  "analyzer" : "custom",
  "text" : "I sing he sings they are singing" --> You have to provide the text. 
}

为什么是分析仪?

分析器通常在您想要索引文本或短语时使用,将文本分解为单词很有用,以便您可以搜索术语以获取文档。

示例:假设您有一个索引 (my_index),并且在该索引中您有一个文本字段 (intro),并且您索引了一个文档,其中"intro":"Hi there I am sid"如果您没有使用分析器,那么这个将存储为“您好,我是 sid”。如果您想查询此文档,您必须编写完整的短语(查找 intro = "Hi there I am sid" 的文档)。但是,如果这个短语被索引为标记,那么即使您查询标记(查找 intro="sid" 的文档),您也会得到该文档。

注意:默认情况下,标准分析器用于所有文本字段。

希望能帮助到你 !


推荐阅读