首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch中的Analyzer是什么?

Elasticsearch中的Analyzer是什么?
EN

Stack Overflow用户
提问于 2018-08-12 09:04:17
回答 2查看 3.5K关注 0票数 5

我有一些问题,了解弹性搜索分析器。它的用途是什么?如何使用它?

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

analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-12 15:01:34

分析器是一个包装器,包装了三个函数:

  • 字符滤波器主要用于删除一些未使用的字符或更改某些字符。
  • 托卡器将文本分解为单独的标记(或单词),它是根据特定的因素(空格、ngram等)来实现的。
  • 令牌过滤器接收令牌,然后应用一些过滤器(例如,将大写术语改为小写)。

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

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

在您的例子中,GET请求

代码语言:javascript
复制
GET http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball

相当于:

代码语言:javascript
复制
GET _analyze
{
  "analyzer" : "snowball",
  "text" : "I sing he sings they are singing"
}

其中产出:

代码语言:javascript
复制
{
  "tokens": [
    {"token": "i", "position": 1, ...},
    {"token": "sing", "position": 2, ...},
    {"token": "he", "position": 3, ...},
    {"token": "sing", "position": 4, ...},
    {"token": "sing", "position": 7, ...},
  ]
}

正如文章中提到的那样。

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

代码语言:javascript
复制
GET my_index/_analyze
{
  "analyzer" : "custom",
  "text" : "I sing he sings they are singing" --> You have to provide the text. 
}

为什么是分析器?

分析器通常用于索引文本或短语时,将文本分解为单词是很有用的,这样您就可以搜索条件以获得文档。

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

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

希望能帮上忙!

票数 15
EN

Stack Overflow用户

发布于 2022-03-27 16:02:51

分析器:,一个分析器,由1、字符过滤器、 2、过滤器3组成。分析器基本上是这些构建块的包,每个模块都会更改输入流。因此,当索引文档时,它会通过以下流程:

  1. 首先可以添加一个或多个字符筛选器,字符筛选器接收文本字段的原始文本,然后通过添加、删除或更改字符来转换值。这方面的一个例子可能是删除任何HTML标记。
  2. 后置标记器将文本拆分为单个标记,通常为单词。所以,如果我们有一个有10个单词的句子,我们就会得到一个由10个记号组成的数组。在默认情况下,分析器可能只有一个标记器--它使用的是令牌程序名称标准,它使用Unicode文本分割算法,该算法基本上按空格拆分,并且移除大多数符号,如逗号、句号、分号等。这是因为大多数符号在搜索时都没有用处,因为它们是为人类所读的。除了将文本拆分为令牌之外,令牌程序还负责记录令牌的位置,包括标记所代表的单词的开始和结束字符偏移量。这使得将标记映射到原始单词成为可能--在执行Fosi短语搜索和邻近搜索时,用于将匹配的单词突出显示到标记的位置。
  3. 在将文本拆分成令牌之后,它通过一个或多个令牌过滤器运行。令牌过滤器可以添加、删除或更改令牌。这有点类似于字符过滤器,但是令牌过滤器使用的是令牌流而不是字符流。有两个不同的令牌过滤器,其中最简单的一个是小写令牌过滤器,它只将所有字符转换为小写。另一个在许多情况下有用的令牌过滤器是stop。它删除了常见的单词,这些词被称为停止词。另一个非常有用的标记过滤器是同义词,它在给相似的单词赋予相同的意义方面很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51807333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档