我在理解弹性搜索分析器时遇到一些问题。它是做什么用的以及如何使用?
在this article中,源文本中有一个标记器和标记过滤器。我是否无法从URL或索引内的文本中了解源文本?在文章中,它说要执行“ GET
http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball“
来自URL,但是此分析器与搜索索引中的文本有关吗?
如果我的问题听起来很愚蠢,我感到非常困惑和抱歉。
答案 0 :(得分:2)
Analyzer是包装三个函数的包装器:
您正在寻找的是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用于所有文本字段。
希望有帮助!