elasticsearch - Elasticsearch 中的 Analyzer 有什么用?
问题描述
我在理解弹性搜索分析器时遇到了一些问题。它的用途和使用方法是什么?
在这篇文章中,有一个来自源文本的分词器和分词过滤器。我无法理解源文本是来自 URL 还是来自索引内的文本?从文章中,它说要执行“GET
http://localhost:9200/_analyze?text=I%20sing%20he%20sings%20they%20are%20singing&analyzer=snowball "
哪个来自 URL,但是此分析器是否与搜索我的索引中的文本有关?
如果我的问题听起来很愚蠢,我很困惑和抱歉。
解决方案
Analyzer是一个包装器,它包装了三个函数:
- 字符过滤器:主要用于去除一些不使用的字符或改变一些字符。
- Tokenizer:将文本分解为单个标记(或单词),并根据某些因素(空格、ngram 等)进行。
- 令牌过滤器:它接收令牌,然后应用一些过滤器(例如将大写术语更改为小写)。
简而言之,分析器用于告诉 elasticsearch 如何索引和搜索文本。
您正在研究的是分析 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":"Hi there I am sid"如果您没有使用分析器,那么这个将存储为“您好,我是 sid”。如果您想查询此文档,您必须编写完整的短语(查找 intro = "Hi there I am sid" 的文档)。但是,如果这个短语被索引为标记,那么即使您查询标记(查找 intro="sid" 的文档),您也会得到该文档。
注意:默认情况下,标准分析器用于所有文本字段。
希望能帮助到你 !
推荐阅读
- regex - 如何在文本中保留数字
- java - Spring MVC - 本地主机工作应用程序在 Heroku 部署后返回错误 404
- javascript - 如何覆盖元素原型函数?
- php - 找不到从 2 个不同的表中选择的好解决方案
- python - 这个 DFS 实现有什么问题?
- linux - sed 命令删除文件中的特定项目
- javascript - 需要查看当前用户是否是创建正在编辑的记录的同一用户
- java - 如何使用 JDK 13 打开 Jenkins JNLP 文件
- vba - VBA - PowerPoint - 插入自定义项目符号
- install4j - 如何为后台更新下载器提供安装程序变量?