Elasticsearch中的Analyzer的作用是什么?

xxestter

我在理解弹性搜索分析器时遇到一些问题。它是做什么用的以及如何使用?

这篇文章中,有来自源文本的标记生成器和令牌过滤器。我是否无法从URL或索引内部的文本中了解源文本?在文章中,它说要执行“ GET

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

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

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

技术官网

分析器是包装三个功能的包装器:

  • 字符过滤器主要用于剥离一些未使用的字符或更改某些字符。
  • 标记生成器符文本成单独的令牌(或字),它确实,基于某些因素(空白,NGRAM等)。
  • 令牌过滤器它接收令牌,然后应用一些过滤器(例如,将大写术语更改为小写)。

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

您正在寻找的是Analyze 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”的文档建立了索引:“嗨,我在sid”,如果您不使用分析器,则此将被存储为“嗨,我在海边”。如果要查询此文档,则必须编写完整的短语(在intro =“嗨,我在sid”中查找文档)。但是,如果将此短语索引为标记,那么即使您查询标记(在intro =“ sid”中查找文档),您也会得到该文档。

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

希望能帮助到你 !

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章