搜索补全功能使用的是es的completion suggester实现 官方文档地址:
先设置mapping:
POST /index/completion/_mapping{ "properties":{ "title": { "type": "text", "analyzer": "ik_sync_smart" }, "title_suggest": { "type": "completion", "analyzer": "ik_sync_smart", "search_analyzer": "ik_sync_smart" } }}
重点是title_suggest,这个字段就是之后我们搜索补全的字段,需要设置type为completion,analyzer按情况设置分析器
索引数据:
POST /index/completion/_bulk{ "index" : { } }{ "title": "背景天安门广场大学", "title_suggest": "背景天安门广场大学"}{ "index" : { } }{ "title": "北京天安门","title_suggest": "北京天安门"}{ "index" : { } }{ "title": "北京鸟巢","title_suggest": "北京鸟巢"}{ "index" : { } }{ "title": "奥林匹克公园","title_suggest": "奥林匹克公园"}{ "index" : { } }{ "title": "奥林匹克森林公园","title_suggest": "奥林匹克森林公园"}{ "index" : { } }{ "title": "北京奥林匹克公园","title_suggest": "北京奥林匹克公园"}{ "index" : { } }{ "title": "北京奥林匹克公园","title_suggest": {"input": "我爱中国","weight": 100}}
索引的时候可以对suggest字段,增加weight增加排序权重
搜索补全:
POST /index/completion/_search{ "size": 0, "suggest": { "blog-suggest": { "prefix": "北京", "completion": { "field": "title_suggest" } } }}返回:{ "took": 27, "timed_out": false, "_shards": { "total": 3, "successful": 3, "skipped": 0, "failed": 0 }, "hits": { "total": 0, "max_score": 0, "hits": [] }, "suggest": { "blog-suggest": [ { "text": "北京", "offset": 0, "length": 2, "options": [ { "text": "北京天安门", "_index": "jzbsearch", "_type": "completion", "_id": "AWK9FJDeGCbNhyb_l9I6", "_score": 1, "_source": { "title": "北京天安门", "title_suggest": "北京天安门" } }, { "text": "北京奥林匹克公园", "_index": "jzbsearch", "_type": "completion", "_id": "AWK9FJDeGCbNhyb_l9I-", "_score": 1, "_source": { "title": "北京奥林匹克公园", "title_suggest": "北京奥林匹克公园" } }, { "text": "北京鸟巢", "_index": "jzbsearch", "_type": "completion", "_id": "AWK9FJDeGCbNhyb_l9I7", "_score": 1, "_source": { "title": "北京鸟巢", "title_suggest": "北京鸟巢" } } ] } ] }}
参考链接: