我在理解弹性搜索分析器时遇到一些问题。它的用途是什么以及如何使用它?
在这篇文章中,有一个来自源文本的分词器和分词过滤器。我是否无法理解来自 URL 或索引内文本的源文本?从文章中,它说要执行“GET
http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball "
这是来自 URL,但是这个分析器与搜索我的索引中的文本相关吗?
如果我的问题听起来很愚蠢,我很困惑并且很抱歉。
Tec*_*Sid 17
分析器是一个包装器,它包装了三个函数:
简而言之,分析器用于告诉 Elasticsearch 应如何对文本进行索引和搜索。
您正在研究的是Analyze API,这是一个非常好的工具,可以帮助您了解分析器的工作原理。文本提供给此 API,与索引无关。
在您的情况下,GET 请求:
GET http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball
Run Code Online (Sandbox Code Playgroud)
相当于:
GET _analyze
{
"analyzer" : "snowball",
"text" : "I sing he sings they are singing"
}
Run Code Online (Sandbox Code Playgroud)
其输出:
{
"tokens": [
{"token": "i", "position": 1, ...},
{"token": "sing", "position": 2, ...},
{"token": "he", "position": 3, ...},
{"token": "sing", "position": 4, ...},
{"token": "sing", "position": 7, ...},
]
}
Run Code Online (Sandbox Code Playgroud)
正如文章中提到的。
还有一件事,假设您在索引中定义了一个自定义分析器,它以您自己的方式组合执行字符过滤、标记化和标记过滤,并且您想检查它将如何标记文本,那么您可以使用_analyze终点与您的索引名称,即使在这种情况下,您也必须提供文本。
GET my_index/_analyze
{
"analyzer" : "custom",
"text" : "I sing he sings they are singing" --> You have to provide the text.
}
Run Code Online (Sandbox Code Playgroud)
为什么需要分析仪?
当您想要对文本或短语进行索引时,通常会使用分析器,将文本分解为单词非常有用,以便您可以搜索术语来获取文档。
示例:假设您有一个索引(my_index),并且在该索引中您有一个文本字段(intro),并且您索引了一个文档,其中“intro”:“嗨,我是 sid”,如果您不使用分析器,则此将被存储为“嗨,我是 sid”。如果您想查询此文档,则必须编写完整的短语(查找 intro =“Hi There I am sid”的文档)。但是,如果这个短语被索引为标记,那么即使您查询标记(查找 intro="sid" 的文档),您也会获得该文档。
注意:默认情况下,标准分析器用于所有文本字段。
希望能帮助到你 !
| 归档时间: |
|
| 查看次数: |
5217 次 |
| 最近记录: |