使用的是elasticsearch 6.2.2
mapping.json
{
"mappings": {
"prod_resource": {
"properties": {
"id": {
"type": "text",
"fielddata": true
},
"name_en": {
"type": "text",
"analyzer": "standard"
},
"name_cn": {
"type": "text"
},
"address_area": {
"type": "text",
"analyzer": "pinyin_analyzer",
"fields": {
"content": {
"type": "keyword",
"store": false
}
}
},
"state_name": {
"type": "text",
"fields": {
"content":{
"type": "keyword",
"store": false
}
}
},
"province_name": {
"type": "text",
"fields": {
"content":{
"type": "keyword",
"store": false
}
}
},
"city_name": {
"type": "text",
"fields": {
"content":{
"type": "keyword",
"store": false
}
}
},
"county_name": {
"type": "text",
"fields": {
"content":{
"type": "keyword",
"store": false
}
}
},
"address_cn": {
"type": "text"
},
"detail_content": {
"type": "text"
},
"address_en": {
"type": "text",
"analyzer": "standard"
},
"create_date": {
"type": "date",
"format": "yyy-MM-dd HH:mm:ss"
},
"create_by": {
"type": "keyword",
"store": false
}
}
}
},
"settings": {
"refresh_interval": "5s",
"number_of_shards" : 2,
"index": {
"analysis": {
"analyzer": {
"default": {
"char_filter" : ["tsconvert"],
"tokenizer": "ik_max_word",
"filter": ["pinyin_first_letter_and_full_pinyin_filter"]
},
"default_search": {
"char_filter" : ["tsconvert"],
"tokenizer": "ik_max_word",
"filter": ["pinyin_first_letter_and_full_pinyin_filter"]
},
"pinyin_analyzer": {
"char_filter" : ["tsconvert"],
"tokenizer": "ik_max_word",
"filter": ["pinyin_first_letter_and_full_pinyin_filter"]
},
"han_analyzer": {
"char_filter" : ["tsconvert"],
"tokenizer": "ik_max_word"
}
},
"tokenizer": {
"my_pinyin": {
"type" : "pinyin",
"keep_separate_first_letter" : true,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
},
"tsconvert": {
"type": "stconvert",
"delimiter": "#",
"keep_both": false,
"convert_type": "t2s"
}
},
"char_filter": {
"tsconvert": {
"type": "stconvert",
"convert_type": "t2s"
}
},
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 50
},
"pinyin_first_letter_and_full_pinyin_filter" : {
"type" : "pinyin",
"keep_separate_first_letter" : false,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
}
}
}
}
}
}
分词器名字default 代表处理收录数据默认使用的分词器,主要是替代系统默认。
分词器名字default_search,代表搜索文本默认使用的分词器,主要是替代系统
数据录入顺序
input------->CharacterFilters------------>tokenizer----------->tokenFilters-------->output
字符过滤器(Character filters) 比如繁体转简体,html格式转纯文本
分词器 (Tokenization) 对文本分词
标记过滤器(Token filters) 对分词后的关键字再处理,比如过滤停用词,提取关键字(中文词组)的拼音
搜索方式
主要是两种query和filter。前者会对搜索关键字分词处理,然后再去文档中匹配,其中还会计算相似度,相关度等;后者只对搜索关键字做匹配,不对输入的搜索关键字做任何处理,并对搜索关键字设计了缓存。
term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个。比如说我们要找标题为北京奥运的所有文档
match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,
match_phrase
搜索方式和match类似,先对搜索词建立索引,并要求所有分词必须在文档中出现(像不像operator为and的match查询),除此之外,还必须满足分词在文档中出现的顺序和搜索词中一致且各搜索词之间必须紧邻,因此match_phrase也可以叫做紧邻搜索。
slop参数。该参数可以指定相隔多少个词仍被算作匹配成功。
完全匹配的文档占的评分比较高,则需要使用best_fields
越多字段匹配的文档评分越高,就要使用most_fields
本文介绍如何在Elasticsearch中配置中文分词器,包括分词器的定义、设置及使用方法。同时探讨了不同类型的查询如term、match、match_phrase的区别,并通过实例说明了如何针对中文文本进行高效搜索。

2221

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



