当前位置: 首页 > news >正文

ElasticSearch之Completion Suggester

写在前面

通过completion suggester可以实现如下的效果:
在这里插入图片描述
其实就是做的like xxx%这种。通过FST这种数据结构来存储,实现快速的前缀匹配,并且可以将es所有的数据加载到内存中所以速度completion的查询速度非常快。

需要注意,如果是某个字段想要使用completion suggester的功能,需要将其类型设置为completion,也就是我们需要显示的设置mapping来指定。

1:例子

首先来创建索引并指定mapping:

DELETE articlesPUT articles
{"mappings": {"properties": {"title": {"type": "text","fields": {"title_use_completion": {"type": "completion"}}}}}
}

接着插入数据:

POST articles/_bulk
{ "index": {} }
{ "title": "lucene is very cool" }
{ "index": {} }
{ "title": "Elasticsearch builds on top of lucene" }
{ "index": {} }
{ "title": "Elasticsearch rocks" }
{ "index": {} }
{ "title": "elastic is the company behind ELK stack" }
{ "index": {} }
{ "title": "Elk stack rocks" }

查询:

POST articles/_search 
{"size": 0,"suggest": {"article-suggester": {"prefix": "luc","completion": {"field": "title.title_use_completion"}}}
}

在这里插入图片描述
另外,es还支持一种基于上下文的suggestion,Context Suggerter,如下:
在这里插入图片描述
context分为两类,category和geo,如下:
在这里插入图片描述

以context为里来看下。

  • 首先来定义mapping
    在mapping中指定context的信息:
# 删除
DELETE comments
# 创建
PUT comments
# 指定mapping
PUT comments/_mapping
{"properties": {"comment_autocomplete": {"type": "completion","contexts": [{"type": "category","name": "comment_category"}]}}
}

数据:

# 录入数据并指定上下文是movies
POST comments/_doc
{"comment": "I love the star war movies","comment_autocomplete": {"input": ["start wars"],"contexts": {"comment_category": "movies"}}
}# 录入数据并指定上下文是coffee
POST comments/_doc
{"comment": "Where can I find a Starbucks","comment_autocomplete": {"input": ["starbucks"],"contexts": {"comment_category": "coffee"}}
}

movies上下文查询:

# 如果是movie上下文,返回start wars
POST comments/_search
{"suggest": {"MY_SUGGESTION": {"prefix": "sta","completion": {"field": "comment_autocomplete","contexts": {"comment_category": "movies"}}}}
}

在这里插入图片描述
coffee上下文查询:

# 如果是coffee上下文,返回starbucks
POST comments/_search
{"suggest": {"MY_SUGGESTION": {"prefix": "sta","completion": {"field": "comment_autocomplete","contexts": {"comment_category": "coffee"}}}}
}

在这里插入图片描述

最后看下term,phrase,completion三者的对比:
在这里插入图片描述

写在后面

参考文章列表

倒排索引:ES倒排索引底层原理及FST算法的实现过程 。

http://www.lryc.cn/news/308367.html

相关文章:

  • ant 布局组件 组件等高设置
  • 不可多得的干货,网易的朋友给我这份339页的Android面经
  • Qt项目:网络1
  • 软件测试有哪些常用的测试方法?
  • 【C语言基础】:深入理解指针(一)
  • 单点故障解决方案之Smart Link与Monitor Link
  • QT之QSharedMemory共享内存
  • string 类 经典习题之数字字符相加
  • 通讯录——C语言实现
  • 优思学院|3步骤计算出Cpk|学习Minitab
  • 【Java编程进阶之路 06】深入探索:JDK、JRE与JVM的关系与差异
  • Linux中的touch命令
  • 智能驾驶规划控制理论学习-基于采样的规划方法
  • 二叉树——二叉树所有路径
  • 算法训练营day38(补),动态规划6
  • 【java、微服务、nacos】nacos服务分级存储模型
  • 共享旅游卡:打开0费用旅游新纪元,探索40+精彩线路
  • MQTT协议解析:揭秘固定报头、可变报头与有效载荷的奥秘
  • 备战蓝桥杯---树形DP基础3
  • IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知
  • c#委托的三种实现方式
  • c/c++|红黑树|分析应用|锚点
  • 2-29算法习题总结
  • 当Linux 磁盘满了,查看大文件并删除
  • STL -萃取特性迭代器
  • python pandas写入csv
  • oracle 数据库建集群式数据库的DBLINK的语法
  • 基于JAVA的毕业设计分配选题系统 开源项目
  • Android 接入指纹识别
  • 如何通过代理IP安全使用Linkedln领英?