Term Suggester
java
"suggest_mode":"missing" missing 默认选项,不返回精准匹配到的分词结果
"suggest_mode":"popular" popular 大于等于搜索词频率的返回
"suggest_mode":"always", 不做任何限制
"min_doc_freq":2 出现在文档中的次数大于min_doc_freq的才返回,同一文档中多次出现算一次。
GET /product/_search
{
"suggest": {
"desc_suggest": {
"text":"手机中的",
"term":{
"field":"desc",
"suggest_mode":"popular",
"min_doc_freq":2
}
}
}
}
Completion Suggester
java
基于内存而非索引(内存消耗大),性能好,只适合前缀搜索
结果精准度高召回率低
#添加新字段 设置suggest
PUT /product/_mapping
{
"properties": {
"desc_sugg": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"suggest": {
"type": "completion",
"analyzer": "ik_max_word"
}
}
}
}
}
#给新字段赋值
POST /product/_update_by_query
{
"script": {
"source": "ctx._source.desc_sugg=ctx._source.desc",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
# "skip_duplicates":true, 结果去重
# "fuzziness":2 允许容错数
GET /product/_search
{
"suggest": {
"desc_suggest": {
"prefix": "耳机",
"completion": {
"field": "desc_sugg.suggest",
"skip_duplicates":true,
"fuzzy":{
"fuzziness":2
}
}
}
}
}
Context Suggester
java
新增索引
PUT product_suggest
{
"mappings": {
"properties": {
"suggest": {
"type": "completion",
"contexts": [
{
"name": "place_type",
"type": "category",
"path": "tags"
},
{
"name": "localtion",
"type": "geo",
"path": "loc",
"precision": 4
}
]
},
"loc":{
"type": "geo_point"
}
}
}
}
新增数据
PUT /product_suggest/_doc/1
{
"suggest":["hello","word","tremhhh"],
"tags":["no","hh"]
}
PUT /product_suggest/_doc/2
{
"suggest":["hellhho","word","treeemhhh"],
"tags":["monely"]
}
PUT /product_suggest/_doc/3
{
"suggest": [
"latlon",
"word",
"tremhhh"
],
"loc": [
{
"lat": 43.56,
"lon": -79.56
},
{
"lat": 49.56,
"lon": -59.56
}
]
}
# "place_type":["no"] 在传入的指定分类中查询
# {"context":"monely","boost":2} boost增加权重返回结果会排在前面
POST /product_suggest/_search
{
"suggest": {
"tag_suggest": {
"prefix": "he",
"completion": {
"field": "suggest",
"size":10,
"skip_duplicates":true,
"contexts":{
"place_type":[
{"context":"no"},
{"context":"monely","boost":2}
]
}
}
}
}
}
#地理位置查询
POST /product_suggest/_search
{
"suggest": {
"tag_suggest": {
"prefix": "tre",
"completion": {
"field": "suggest",
"size": 10,
"skip_duplicates": true,
"contexts": {
"localtion": [
{
"lat": 43.55,
"lon": -79.55
}
]
}
}
}
}
}