Elasticsearch筛选分词使用
Analysis介绍
Elasticsearch的Rest API中analysis设置用于定义自定义的文本分析过程,以满足特定的搜索和索引需求。以下是 char_filter
、filter
、tokenizer
和 analyzer
属性的区别和作用:
1. char_filter(字符过滤器)
- 作用:在文本被分词之前,首先对文本执行字符级的预处理操作。
- 使用场景:用来处理输入文本中的特定字符,例如替换、删除或转换某些字符或字符序列。
- 示例操作
- 替换 HTML 实体(如
- 删除特定符号(如删除某些控制字符)。
- 替换 HTML 实体(如
- 应用顺序:
char_filter
先于分词器(tokenizer
)运行。
示例配置:
"char_filter": {
"html_strip": {
"type": "html_strip"
}
}
2. tokenizer(分词器)
- 作用:将输入文本分解成一个个独立的词项(tokens)。
- 使用场景:指定如何根据语言规则或其他逻辑将文本切分为词语或子单元。
- 常用分词器
standard
:默认的标准分词器,基于 Unicode 文本分词规则。whitespace
:按空格分词。keyword
:将整个文本视为单一词项。pattern
:基于正则表达式的分词器。
示例配置:
"tokenizer": {
"my_tokenizer": {
"type": "whitespace"
}
}
3. filter(过滤器)
- 作用:在文本被分词之后,对分词结果进行进一步的处理。
- 使用场景:修改或增强分词器生成的词项,例如去除停用词、词干提取、同义词替换等。
- 常用过滤器
lowercase
:将词项转为小写。stop
:移除停用词。synonym
:同义词替换。stemmer
:提取词干。length
:过滤掉特定长度的词项。
示例配置:
"filter": {
"my_stop_filter": {
"type": "stop",
"stopwords": ["the", "a", "an"]
}
}
4. analyzer(分析器)
- 作用:
analyzer
是分词和过滤链条的集合,用于定义完整的文本分析流程。 - 使用场景:通过组合
char_filter
、tokenizer
和filter
来创建自定义的文本分析器。 - 主要类型
- 内置分析器:如
standard
、whitespace
、simple
等。 - 自定义分析器:可以通过自定义
char_filter
、tokenizer
和filter
组合来满足特定需求。
- 内置分析器:如
示例配置:
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": ["lowercase", "my_stop_filter"]
}
}
组合使用:
- char_filter:在分词之前对原始文本进行处理。
- tokenizer:将文本分解为词项。
- filter:对分词后的词项进一步处理。
- analyzer:整合上述三个步骤,定义完整的文本分析流程。
通过这些组件的组合,Kibana 和 Elasticsearch 可以灵活地处理和分析各种格式的文本内容,从而实现更高效的全文搜索和查询优化。
DELETE my_index
PUT my_index
{
"settings": {
"analysis": {
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": """(\d{3})\d{4}(\d{4})""",
"replacement": "$1****$2"
}
},
"filter": {
"my_stopword": {
"type": "stop",
"stopwords": [
"is",
"in",
"the",
"a",
"at",
"for"
]
}
},
"tokenizer": {
"my_tokenizer": {
"type": "pattern",
"pattern": "[,.!?]"
}
},
"analyzer": {
"my_analyzer": {
"type": "custom",
"char_filter": [
"my_char_filter"
],
"tokenizer": "my_tokenizer",
"filter": "my_stopword"
}
}
}
}
}
# 测试
GET my_index/_analyze
{
"analyzer": "my_analyzer",
"text": ["hello, my,phone,is,:12345678901"]
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!