##########通过suggest completion 进行搜索补全建议############
创建索引使用ik分词器 对于keyword字段设置类型为completion
分词器为ik分词器的ik_smart 分词的力度小,分出来的词少
PUT suggest
{
"settings": {
"number_of_replicas": 0,
"number_of_shards": 1
},
"mappings": {
"properties": {
"keyword": {
"type": "completion",
"analyzer": "ik_smart",
"fields": {
"key": {
"type": "keyword"
}
}
},
"id": {
"type": "keyword"
},
"createDate": {
"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss"
}
}
}
}
批量导入测试数据
refresh=true 意味着空字符串或true在操作发生后立即刷新相关的主碎片和副本碎片(不是整个索引),以便更新后的文档立即出现在搜索结果中,只有经过仔细考虑和核实,从索引和搜索的角度来看,它不会导致性能低下之后,才能这样做。
POST _bulk/?refresh=true
{ "index":{ "_index" : "suggest","_type":"_doc" }}
{ "keyword": "项目"}
{ "index" : { "_index":"suggest", "_type":"_doc"}}
{ "keyword": "项目进度"}
{ "index":{ "_index" : "suggest", "_type" :"_doc" } }
{ "keyword": "项目管理"}
{ "index" :{"_index" : "suggest", "_type":"_doc"}}
{ "keyword": "项目进度及调整 汇总.doc_文档"}
{ "index" : { "_index" :"suggest","_type":"_doc"}}
{ "keyword": "项目"}
GET suggest/_search
进行搜索补全查询 三要素
1.指定前缀搜索prefix 2.指定搜索补全completion 3.指定搜索的filed
GET /suggest/_search
{
"suggest": {
"my_suggest": {
"prefix":"项目",
"completion":{
"field" :"keyword"
}
}
}
}
通过completion.size 可以指定每次查询出来的结果数
通过skip_duplicates 可以将重复数据去除
GET /suggest/_search
{
"suggest": {
"my_suggest": {
"prefix":"项目",
"completion":{
"field" :"keyword",
"size":20,
"skip_duplicates":true
}
}
}
}
查询时添加 _source:{“filed”} 过滤源以只返回建议字段
建议的配置权重作为_score返回。文本字段使用索引建议的输入。建议默认返回完整的文档_source。由于磁盘获取和网络传输开销,_source的大小会影响性能。要节省一些网络开销,可以使用源筛选从_source中过滤掉不必要的字段,以最小化_source的大小。注意,_suggest端点不支持源过滤,但在_search端点上使用suggest
GET /suggest/_search
{
"_source": "keyword",
"suggest": {
"my_suggest": {
"prefix":"项目",
"completion":{
"field" :"keyword",
"size":20,
"skip_duplicates":true
}
}
}
}