Analysis
Analysis 解析器由三个模块=character filters(字符过滤器), tokenizers(标记器), and token filters(标记过滤器)组成
Analysis 中的自定义分词
analysis 基本概念 === 全文索引中会用到Tokenizer(分词器)对文档分词,提取token(词元),讲token进一步处理如大小写转换的算法叫Filter(过滤器)。
所以当提供的分词器不满足我们使用时,比如中文分词,我们需要自定义分词
自定义分词结构如下

正常来说,我们可以在mapping中创建索引时设置
analyzer指定,但是对于更多的分词需求就要自定义分词来达到想要的效果
需求:需要对中文分词,同义词转换,特殊字符过滤,html过滤

PUT /test
{
"settings": {
"analysis": {
"analyzer":{
//自定义分词
"my_test_analyzer":{
"type":"custom", //自定义类型
"tokenizer": "ik_smart", //分词器
"filter":["lowercase","my_synonym"],//使用带配置
"char_filter":["mapping_filter","html_filter"] //使用带配置
}
},
"char_filter": {
"html_filter":{
"type":"html_strip"
},
"mapping_filter":{
"type":"mapping",
"mappings": [
"yi=>一",//需要转换的字符
"er=>二",
"Π=>n"
]
}
},
"filter": {
"my_synonym":{
//同义词
"type":"synonym",
"synonyms":[
"工商,工行=>中国工商银行",
"农行=>中国农业银行"
]
}
}
}
}
}
看下分词结果
GET test/_analyze
{
"text": ["<p>我们在工行?Whats YOU Πame</p>"],
"analyzer": "my_test_analyzer"
}

常用分词配置
https://www.elastic.co/guide/en/elasticsearch/reference/7.16/analysis.html
Tokenizers(分词器)
letter 非字母时分割文本
GET _analyze
{
"text": "你是谁 阿克苏德拉科时间到了",
"tokenizer": "letter"
}

lowercase 非字母分割+转为小写
# lowercase 非字母时分割文本+元转为小写
GET _analyze
{
"text": "WHO Are You1so",
"tokenizer": "lowercase"
}

whitespace 空格分割文本
GET _analyze
{
"text": "WHO You,你 是谁",
"tokenizer": "whitespace"
}

###uax_url_email URL ,email 词元
GET _analyze
{
"text": "http://localhost:8080/api是:111111111@163.com",
"tokenizer": "uax_url_email"
}

char_group 自定义标记语法
POST _analyze
{
"tokenizer": {
"type": "char_group",
"tokenize_on_chars": [
"whitespace",

本文介绍了如何在Elasticsearch中进行自定义分词配置,包括使用IK分词器、设置同义词、过滤特殊字符和HTML内容。通过创建自定义分析器并在mapping中设置,可以实现中文分词、同义词转换和HTML过滤等功能。同时,文章还探讨了不同类型的分词器和过滤器,如letter、lowercase、whitespace等,以及如何使用n-gram、edge_ngram等进行分词优化。此外,还涉及了字符过滤器如html_strip和mapping,以及如何结合pinyin插件实现拼音分词。通过实例展示了如何在查询中应用这些配置,以满足全文索引的多样化需求。
最低0.47元/天 解锁文章
3628

被折叠的 条评论
为什么被折叠?



