Elasticsearch中的Analyzer的作用是什么?

时间:2018-08-12 09:04:18

标签: elasticsearch

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

this article中,源文本中有一个标记器和标记过滤器。我是否无法从URL或索引内的文本中了解源文本?在文章中,它说要执行“ GET

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

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

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

1 个答案:

答案 0 :(得分:2)

Analyzer是包装三个函数的包装器:

  • Character filter:主要用于剥离一些未使用的字符或更改某些字符。
  • Tokenizer:将文本分解为单独的标记(或单词),并根据某些因素(空白,ngram等)执行此操作。
  • Token filter:它接收令牌,然后应用一些过滤器(例如,将大写术语更改为小写)。
简而言之,可以使用分析器告诉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, ...},
  ]
}
article中所述的

再说一件事,假设您在索引中定义了一个自定义分析器,该分析器以自己的方式结合了字符过滤,标记化和标记过滤功能,并且您想检查它将如何标记文本,那么您可以在索引名称中使用 _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” ,如果您不使用分析仪,则将其存储为“嗨,我是sid”。如果要查询此文档,则必须编写完整的短语(在intro =“嗨,我在sid”中查找文档)。但是,如果将此短语索引为令牌,那么即使您查询令牌(在intro =“ sid”中查找文档),您也会得到该文档。

注意:默认情况下,standard analyzer用于所有文本字段。

希望有帮助!