elasticsearch之Suggester

Suggester

本文是简单介绍并没有操作,参考文档: https://elasticsearch.cn/article/142
suggester是提供合适的建议。例如我们在搜索引擎中,输入我们需要查询的内容,搜索引擎根据用户输入搜索的过程中,进行自动补全或者纠错,通过协助用户输入更精准的关键词,提高后续全文搜索阶段文档匹配的程度。
Suggesters基本的运作原理是将输入的文本分解为token,然后在索引的字典里查找相似的term并返回。 根据使用场景的不同,Elasticsearch里设计了4种类别的Suggester,分别是:

  • Term Suggester
  • Phrase Suggester
  • Completion Suggester
  • Context Suggester

Term Suggester

根据用户输入的文本进行分词成各个token,基于索引给出每个token的建议。
下面是一个例子:

POST /blogs/_search
{ 
  "suggest": {
    "my-suggestion": {
      "text": "lucne rock",
      "term": {
        "suggest_mode": "missing",
        "field": "body"
      }
    }
  }
}

其中suggest表示在使用建议功能,my-suggestion自定义建议的名字,text:放入用户输入文本,term:表示在使用 Term Suggestersuggest_mode使用term建议模式 ,field使用该字段中的词给出建议。
例如上面将返回:

"suggest": {
    "my-suggestion": [
      {
        "text": "lucne",
        "offset": 0,
        "length": 5,
        "options": [
          {
            "text": "lucene",
            "score": 0.8,
            "freq": 2
          }
        ]
      },
      {
        "text": "rock",
        "offset": 6,
        "length": 4,
        "options": []
      }
    ]
  }

给出用户输入的lucne rock的两个建议(被分为两个token),其中lucne给的建议是lucenerock并没有给出建议。
因为使用的suggest_mode决定的,他有三个可选择的值

  • missing:仅仅提供索引中没有对应词项的建议
  • popular:给出一个词频更高的建议(如果索引中没有存在,也是不给出的)
  • always:每个token都必须给出建议。

其实这里面有很多的算法,该算法可以很好的推广到推荐系统中,算法是一切。

Phrase Suggester

term suggester是给出每个token建议,而phrase是基于用户的文本给出短语建议,利用各个term的逻辑性,给出完整的短语。
例子

POST /blogs/_search
{
  "suggest": {
    "my-suggestion": {
      "text": "lucne and elasticsear rock",
      "phrase": {
        "field": "body"
      }
    }
  }
}

当然复杂度要高于term建议,都是学习算法的好帮手。

Completion Suggester

它主要针对的应用场景就是"Auto Completion"自动补全。 此场景下用户每输入一个字符的时候,就需要即时发送一次查询请求到后端查找匹配项,在用户输入速度较高的情况下对后端响应速度要求比较苛刻。因此实现上它和前面两个Suggester采用了不同的数据结构,索引并非通过倒排来完成,而是将analyze过的数据编码成FST和索引一起存放。对于一个open状态的索引,FST会被ES整个装载到内存里的,进行前缀查找速度极快。但是FST只能用于前缀查找,这也是Completion Suggester的局限所在。
其中completion还支持正则、模糊建议等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值