ElasticSearch之Completion Suggester

写在前面

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

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

1:例子

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

DELETE articles

PUT 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算法的实现过程 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/419196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024最新版,Android开发教程入门

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,还包括各种优秀的开源库。 由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。 深入解析微信 MMKV 源码 初始化获取修改删除读取…

利用Quartz实现复杂的任务调度

第一章:引言 大家好,我是小黑,任务调度,简而言之,就是按照预定计划自动执行任务的过程。不管是数据库备份、报表生成还是发送定时邮件,它们都需要一个可靠的任务调度系统来保证按时完成。 那么&#xff0…

【学习笔记】深度学习实战 | LeNet

简要声明 学习相关网址 [双语字幕]吴恩达深度学习deeplearning.aiPapers With CodeDatasets 深度学习网络基于PyTorch学习架构,代码测试可跑。本学习笔记单纯是为了能对学到的内容有更深入的理解,如果有错误的地方,恳请包容和指正。 参考文献…

基于ssm网络办公系统论文

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

【Linux】Linux安装

Linux安装(保姆级教程) 准备工具下载链接 Linux镜像系统官网(Centos版本):https://www.centos.org/ 虚拟机下载官网:https://www.vmware.com 注:Linux是一种系统统称,就像Windows…

小米科技分享:深入解析阿里巴巴面试题之SQL查询

大家好,我是小米,今天要和大家分享的是在阿里巴巴面试中常见的SQL查询题目。SQL查询是数据库领域中的基础,但也是一个非常重要的技能,无论是在面试中还是实际工作中,都有着举足轻重的地位。让我们一起深入了解一下吧! SQL语句的执行过程 首先,我们来了解一下SQL语句的执…

【Java】基本数据类型、包装类与字符串间的转换 例题

写在前面: 关于这道题,初见感觉有点cpu烧坏了,准确来说是看了网上的一些讲解都感觉不尽人意。自己整理了一下,希望能帮助到大家。 题目: 如下两个题目输出结果相同吗?各是什么。 Object o1 true ? new…

悄悄告诉你,干洗店60%业务都在自这里

洗衣管理软件,让生活更轻松!无论是洗衣还是洗鞋,这款软件都能帮你轻松搞定一切:预约、洗涤进度查询、顾客反馈,一切尽在指尖。 店家使用软件智能管理收衣收鞋,从接收、洗涤到通知顾客取衣,全程自…

【UE 材质】制作加载图案(2)

在上一篇(【UE 材质】制作加载图案)基础上继续实现如下效果的加载图案 效果 步骤 1. 复制一份上一篇制作的材质并打开 2. 添加“Floor”节点向下取整 除相同的平铺数 此时的效果如下 删除如下节点 通过“Ceil”向上取整,参数“Tiling”默认…

4、正则表达式、本地存储

一、正则表达式 1、定义 用事先定义好的一些特定字符,这样的字符组合,组合成一个“规则字符串” 2、正则的组成 特殊字符 字母、数字、下划线、中文、特殊字符… 元字符(常用) 1、\d 匹配至少有一个数字 var reg /\d/ /…

东莞IBM服务器维修之IBM x3630 M4阵列恢复

记录东莞某抖音电商公司送修一台IBM SYSTEM X3630 M4文档服务器RAID6故障导致数据丢失的恢复案例 时间:2024年02月20日, 服务器品牌:IBM System x3630 M4,阵列卡用的是DELL PERC H730P 服务器用途和用户位置:某抖音电…

新品齐发!小牛电动打造全场景高端化产品阵列!

2 月 29 日,全球智能城市出行品牌小牛电动发布“新世代性能旗舰”电摩NX、电自NXT,以及“全场景智驾越野电摩”X3三款新品。同时,与知名体育电竞俱乐部——JDG京东电子竞技俱乐部携手,打造“英雄的联盟”超级形象,引领…

文件误删除怎么恢复?盘点4个有效方法!

“我有一些很重要的工作文件保存在电脑上了,但是刚刚操作的时候却发现有些文件被误删了。有什么简单的误删文件恢复方法吗?” 在日常生活和工作中,我们可能都需要在电脑上保存各种各样的文件。如果在操作时误删比较重要的文件,很多…

进阶了解C++(4)——多态

在上篇文章中,简单的介绍了多态中的概念以及其相关原理。本文将针对多态中其他的概念进一步进行介绍,并且更加深入的介绍关于多态的相关原理。 目录 1. 抽象类: 2. 再谈虚表: 3. 多继承中的虚函数表: 1. 抽象类&am…

Mybatis-Plus介绍

目录 一、Mybatis-Plus简介 1.1、介绍 1.2、特性 1.3、架构 1.4、Mybatis-Plus与Mybatis的区别 二、快速入门 2.1、首先创建数据库mybatis-plus 2.2、创建user表 2.3、插入数据 2.4、创建Spring-Boot项目 2.5、添加依赖 2.6、连接数据库 一、Mybatis-Plus简介 1.1、…

Springboot项目集成短信验证码(超简单)

操作流程 注册验证码平台创建验证码模版开始集成(无需引入第三方库) 注册并登陆中昱维信验证码平台 获取AppID和AppKey。 创建验证码模版 创建验证码模版,获取验证码模版id 开始集成 创建controller import org.springframework.web.bi…

跨域引起的两个接口的session_id不是同一个

来源场景: RequestMapping(“/captcha”)接口设置了SESSION_KEY,也能获取到,但是到了PostMapping(“/login”)接口就是空的,由于跨域导致的两个session_id不是同一个 /*** 系统用户 前端控制器*/ Controller CrossOrigin(origins…

自定义el-dialog的样式

实现效果: 样式代码如下:(可以写在common.scss文件夹中) .el-dialog__header {padding: 16px 20px;border-bottom: 1px solid #DCDFE6;display: flex;align-items: center;.el-dialog__title {font-size: 16px;position: relativ…

MySQL(基础篇)——事务

一.事务简介 事务是一组操作的集合,他是一个不可分割的单位,事务会把所有的操作作色一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 默认MySQL的事务是自动提交的,也就是说&#xff0c…

在VMware中安装CentOS 7并配置Docker

VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统,虚拟机版本为VMware Workstation 16 pro,Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了&#xf…