这个自动补全的功能怎么说呢?比如百度搜索的时候只是输入了一个“老”,但是会有很多提示,什么老师,老人之类的。这就是自动补全!
GET /索引/_search
{
"suggest": {
"prefix_suggestion": {// 自定义推荐名,就是自己起的名字
"prefix": "elastic",// 被补全的关键字,就相当于搜索框中输入的
"completion": {
"field": "productName",// 查询的域
"skip_duplicates": true, // 忽略重复结果
"size": 10 //最多查询到的结果数
}
}
}
}
有一点要注意!注:自动补全对性能要求极高,ES不是通过倒排索引来实现的,所以需要将对应的查询字段类型设置为completion。
PUT /product2
{
"mappings":{
"properties":{
"id":{
"type":"integer",
"store":true,
"index":true
},
"productName":{
"type":"completion"
},
"productDesc":{
"type":"text",
"store":true,
"index":true
}
}
}
}
POST /product2/_doc
{
"id":1,
"productName":"elasticsearch1",
"productDesc":"elasticsearch1 is a good search engine"
}
POST /product2/_doc
{
"id":2,
"productName":"elasticsearch2",
"productDesc":"elasticsearch2 is a good search engine"
}
POST /product2/_doc
{
"id":3,
"productName":"elasticsearch3",
"productDesc":"elasticsearch3 is a good search engine"
}
GET /product2/_search
{
"suggest": {
"prefix_suggestion": {// 自定义推荐名
"prefix": "el",// 被补全的关键字
"completion": {
"field": "productName",// 查询的域
"skip_duplicates": true, // 忽略重复结果
"size": 10 //最多查询到的结果数
}
}
}
}