博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch搜索引擎第十一篇-Suggest查询建议
阅读量:4163 次
发布时间:2019-05-26

本文共 3045 字,大约阅读时间需要 10 分钟。

文章目录

查询建议是什么

查询建议,能够为用户提供良好的使用体验。主要包括:

  • 拼写检查
  • 自动建议查询词(自动补全)

如百度、谷歌搜索:

在这里插入图片描述
在这里插入图片描述

ES查询建议API

查询建议也是使用_search端点地址,在DSL中suggest节点来定义需要的建议查询。

POST twitter/_search{
"query" : {
"match": {
"message": "tring out Elasticsearch" } }, "suggest" : {
"my-suggestion" : {
#一个查询建议名称 "text" : "tring out Elasticsearch", #查询文本 "term" : {
"field" : "message" #指定在哪个字段上获取建议词 } } }}#多个建议查询可以使用全局的查询文本POST _search{
"suggest": {
"text" : "tring out Elasticsearch", "my-suggest-1" : {
"term" : {
"field" : "message" } }, "my-suggest-2" : {
"term" : {
"field" : "user" } } }}

Suggester介绍

term suggester

term 词项建议器,对给入的文本进行分词,为每个词进行模糊查询提供词项建议。对于在索引中存在词默认不提供建议词,不存在的词则根据模糊查询结果进行排序后取一定数量的建议词。

常用的建议选项:
在这里插入图片描述

phrase suggester

phrase 短语建议,在term的基础上,会考量多个term之间的关系,比如是否同时出现在索引的原文里,相邻程度,以及词频等

POST /ftq/_search{
"query": {
"match_all": {
} }, "suggest" : {
"myss":{
"text": "java sprin boot", "phrase": {
"field": "title" } } }}

completion suggester 自动补全

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

参考官网:

为了使用自动补全,索引中用来提供补全建议的字段需特殊设计,字段类型为 completion。

定义一个索引:

PUT music{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : {
"type" : "completion" #定义该字段是自动补全的字段 }, "title" : {
"type": "keyword" } } } }}

存入文档1和文档2,两个文档内容一样:

PUT music/_doc/1?refresh{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ], #指定输入值 "weight" : 34 #指定排序值(可选) }}PUT music/_doc/2?refresh{
"suggest" : {
"input": [ "Nevermind", "Nirvana" ], "weight" : 20 }}

查询看看:

POST music/_search?pretty{
"suggest": {
"song-suggest" : {
"prefix" : "nir", "completion" : {
"field" : "suggest" } } }}POST music/_search?pretty{
"suggest": {
"song-suggest" : {
"prefix" : "nir", "completion" : {
"field" : "suggest", "skip_duplicates": true #去重 } } }}

接着存入文档3和文档4,存的是短语:

PUT music/_doc/3?refresh{
"suggest" : {
"input": [ "lucene solr", "lucene so cool","lucene elasticsearch" ], "weight" : 20 }}PUT music/_doc/4?refresh{
"suggest" : {
"input": ["lucene solr cool","lucene elasticsearch" ], "weight" : 10 }}

再查询看看:

POST music/_search?pretty{
"suggest": {
"song-suggest" : {
"prefix" : "lucene s", "completion" : {
"field" : "suggest" , "skip_duplicates": true } } }}

转载地址:http://zwpxi.baihongyu.com/

你可能感兴趣的文章
【JavaScript 教程】浏览器—History 对象
查看>>
这才是学习Vite2的正确姿势!
查看>>
7 个适用于所有前端开发人员的很棒API,你需要了解一下
查看>>
隐藏搜索框:CSS 动画正反向序列
查看>>
【视频教程】Javascript ES6 教程27—ES6 构建一个Promise
查看>>
【5分钟代码练习】01—导航栏鼠标悬停效果的实现
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(中)
查看>>
127个超级实用的JavaScript 代码片段,你千万要收藏好(下)
查看>>
Flex 布局教程:语法篇
查看>>
年薪50万+的90后程序员都经历了什么?
查看>>
2019年哪些外快收入可达到2万以上?
查看>>
【JavaScript 教程】标准库—Date 对象
查看>>
前阿里手淘前端负责人@winter:前端人如何保持竞争力?
查看>>
【JavaScript 教程】面向对象编程——实例对象与 new 命令
查看>>
我在网易做了6年前端,想给求职者4条建议
查看>>
SQL1015N The database is in an inconsistent state. SQLSTATE=55025
查看>>
RQP-DEF-0177
查看>>
MySQL字段类型的选择与MySQL的查询效率
查看>>
Java的Properties配置文件用法【续】
查看>>
JAVA操作properties文件的代码实例
查看>>