环境
Ubuntu18.04ES 6.6.1
搜索模板
新建模板,便于后续创建索引,直接使用模板,省事方便
PUT _template/goods
{
"index_patterns":"goods*",
"settings": {
"index.number_of_replicas": "1",
"index.number_of_shards": "5",
"index.translog.flush_threshold_size": "512mb",
"index.translog.sync_interval": "60s",
"index.codec": "best_compression",
"analysis": {
"filter": {
"edge_ngram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 50
},
"simple_pinyin_filter": {
"type": "pinyin",
"keep_first_letter": true,
"keep_separate_first_letter": false,
"keep_full_pinyin": false,
"keep_original": false,
"limit_first_letter_length": 50,
"lowercase": true
},
"full_pinyin_filter": {
"type": "pinyin",
"keep_first_letter": false,
"keep_separate_first_letter": false,
"keep_full_pinyin": true,
"none_chinese_pinyin_tokenize": true,
"keep_original": false,
"limit_first_letter_length": 50,
"lowercase": true
}
},
"char_filter": {
"charconvert": {
"type": "mapping",
"mappings_path": "char_filter_text.txt"
}
},
"tokenizer": {
"ik_max_word": {
"type": "ik_max_word",
"use_smart": true
}
},
"analyzer": {
"ngramIndexAnalyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"edge_ngram_filter",
"lowercase"
],
"char_filter": [
"charconvert"
]
},
"ngramSearchAnalyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase"
],
"char_filter": [
"charconvert"
]
},
"ikIndexAnalyzer": {
"type": "custom",
"tokenizer": "ik_max_word",
"char_filter": [
"charconvert"
]
},
"ikSearchAnalyzer": {
"type": "custom",
"tokenizer": "ik_max_word",
"char_filter": [
"charconvert"
]
},
"simplePinyinIndexAnalyzer": {
"tokenizer": "keyword",
"filter": [
"simple_pinyin_filter",
"edge_ngram_filter",
"lowercase"
]
},
"simplePinyinSearchAnalyzer": {
"tokenizer": "keyword",
"filter": [
"simple_pinyin_filter",
"lowercase"
]
},
"fullPinyinIndexAnalyzer": {
"tokenizer": "keyword",
"filter": [
"full_pinyin_filter",
"edge_ngram_filter",
"lowercase"
]
},
"fullPinyinSearchAnalyzer": {
"tokenizer": "keyword",
"filter": [
"full_pinyin_filter",
"lowercase"
]
}
}
}
}
}
新建
char_filter_text.txt存于ES_HOME/config目录下。可以把相关部分删除。
新建索引
goods_v1 将使用上述模板(goods*),可直接使用模板中定义的 analyzer
DELETE goods_v1
PUT /goods_v1
{
"mappings": {
"doc":{
"properties" : {
"id":{
"type":"long"
},
"name" : {
"type": "text",
"analyzer": "ikIndexAnalyzer",
"fields": {
"ngram": {
"type": "text",
"analyzer": "ngramIndexAnalyzer"
},
"SPY": {
"type": "text",
"analyzer": "simplePinyinIndexAnalyzer"
},
"FPY": {
"type": "text",
"analyzer": "fullPinyinIndexAnalyzer"
}
}
},
"update_time" : {
"type":"date"
},
"deleted" : {
"type":"boolean"
}
}
}
}
}
PUT /goods_v1/_alias/goods
{
"is_write_index":true
}
filter&&结果id倒序
本搜索只做简单过滤,并且按id倒序返回,不需要计算相似度
GET goods/_search
{
"query": {
"constant_score": {
"filter": {
"bool": {
"filter": [
{
"term": {
"deleted": {
"value": false,
"boost": 1
}
}
},
{
"bool": {
"should": [
{
"match": {
"name.ngram": {
"query": "水果",
"operator": "OR",
"analyzer": "ngramSearchAnalyzer",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 5
}
}
},
{
"term": {
"name.SPY": {
"value": "水果",
"boost": 1
}
}
},
{
"wildcard": {
"name.SPY": {
"wildcard": "*水果*",
"boost": 0.8

这篇博客介绍了如何在Elasticsearch环境中设置搜索模板,新建索引,并实现中文、全拼和拼音首字母的搜索功能。通过设置filter实现结果过滤,结合ID倒序展示。同时,分享了部分相关Java代码片段,尽管遇到一些问题,但博主提供了参考资料以供解决。


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



