create template
PUT _template/star
{
"index_patterns":"star*",
"settings":{
"refresh_interval":"3s",
"number_of_replicas":1,
"number_of_shards":5,
"analysis":{
"filter":{
"auto_complete_filter":{
"type":"edge_ngram",
"min_gram":1,
"max_gram":15
},
"pinyin_filter" : {
"type" : "pinyin",
"keep_first_letter" : true,
"keep_full_pinyin" : false,
"keep_joined_full_pinyin": true,
"keep_none_chinese" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"trim_whitespace" : true,
"keep_none_chinese_in_first_letter" : true
}
},
"analyzer":{
"chinese_pinyin_prefix_analyzer":{
"type":"custom",
"char_filter": [
"html_strip"
],
"tokenizer":"keyword",
"filter":[
"lowercase",
"pinyin_filter",
"auto_complete_filter"
]
},
"chinese_prefix_analyzer":{
"type":"custom",
"char_filter": [
"html_strip"
],
"tokenizer":"keyword",
"filter":[
"lowercase",
"auto_complete_filter"
]
}
}
}
}
}
create index
DELETE star_v1
PUT star_v1/
{
"mappings": {
"doc": {
"properties": {
"name": {
"type": "text",
"analyzer": "chinese_prefix_analyzer",
"fields":{
"prefix":{
"type":"text",
"analyzer":"chinese_pinyin_prefix_analyzer"
}
}
}
}
}
}
}
init data
POST star_v1/_bulk/?refresh=true
{ "index" : {"_type" : "doc" } }
{ "name": "刘德华"}
{ "index" : { "_type" : "doc" } }
{ "name": "张学友"}
{ "index" : { "_type" : "doc" } }
{ "name": "gutianle"}
{ "index" : { "_type" : "doc" } }
{ "name": "周杰伦"}
{ "index" : { "_type" : "doc" } }
{ "name": "林嘉欣"}
{ "index" : {"_type" : "doc" } }
{ "name": "zhangguorong"}
{ "index" : {"_type" : "doc" } }
{ "name": "张杰"}
{ "index" : {"_type" : "doc" } }
{ "name": "任达华"}
{ "index" : {"_type" : "doc" } }
{ "name": "赵微"}
{ "index" : {"_type" : "doc" } }
{ "name": "杨幂"}
suggest for “l”
GET /star_v1/_search
{
"query": {
"term": {
"name.prefix": {
"value": "l"
}
}
}
}
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 1.9148799,
"hits" : [
{
"_index" : "star_v1",
"_type" : "doc",
"_id" : "_9aqaWsBfEquezXR6q-6",
"_score" : 1.9148799,
"_source" : {
"name" : "刘德华"
}
},
{
"_index" : "star_v1",
"_type" : "doc",
"_id" : "A9aqaWsBfEquezXR6rC6",
"_score" : 1.9148799,
"_source" : {
"name" : "林嘉欣"
}
},
{
"_index" : "star_v1",
"_type" : "doc",
"_id" : "AdaqaWsBfEquezXR6rC6",
"_score" : 1.038246,
"_source" : {
"name" : "gutianle"
}
}
]
}
}
suggest for “ld”
GET /star_v1/_search
{
"query": {
"term": {
"name.prefix": {
"value": "ld"
}
}
}
}
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 2.481217,
"hits" : [
{
"_index" : "star_v1",
"_type" : "doc",
"_id" : "_9aqaWsBfEquezXR6q-6",
"_score" : 2.481217,
"_source" : {
"name" : "刘德华"
}
}
]
}
}
suggest for “刘”
GET /star_v1/_search
{
"query": {
"term": {
"name.prefix": {
"value": "刘"
}
}
}
}
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 2.481217,
"hits" : [
{
"_index" : "star_v1",
"_type" : "doc",
"_id" : "_9aqaWsBfEquezXR6q-6",
"_score" : 2.481217,
"_source" : {
"name" : "刘德华"
}
}
]
}
}
其他
# dsl
POST /star_v1/_analyze
{
"text": "刘德华",
"analyzer": "chinese_pinyin_prefix_analyzer"
}
#result
{
"tokens" : [
{
"token" : "刘",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "刘德",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "刘德华",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "l",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "li",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liu",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liud",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liude",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liudeh",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liudehu",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "liudehua",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "l",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "ld",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
},
{
"token" : "ldh",
"start_offset" : 0,
"end_offset" : 3,
"type" : "word",
"position" : 0
}
]
}
参考