ES入门三:全文搜索Api实践

ES是一个强大的搜索引擎,它提供了非常丰富的数据检索Api来满足用户各种各样的需求。我们今天要介绍的是部分非常基础的全文搜索Api,这部分Api我们会在日常使用中经常用到。

在我们查询一些文本内容的时候,一般不会做精确匹配,一来性能开销大,而来意义也不大
image.png
其实在我们写入数据的时候,系统会使用分词器把文本数据进行分词,并且统计每个词语出现的次数信息,

如上图,当我们检索文本数据的时候,会使用同样的分词器对检索内容进行分词,然后与文本内容匹配,根据统计信息给每个词语打分,最好根据公式算出相关性评分(内容相似度),并且返回相关性最高的TopN个文档返回用户

ES支持全文索引的Api主要有以下几个:

  • match:匹配查询可以处理全文本,精确字段(日前、数字等)
  • match phrase(短语):短语匹配会将检索内容分词,这些词语必须全部出现在检索内容中,并且顺序必须一致,默认情况下这些词必须连续
  • match phrase prefix:与match phrase类似,但最后一个词项会作为前缀,并且匹配这个词项开头的任何词语
  • multi match:通过multi match可以在多个字段上执行相同的查询语句

## match(匹配查询) 匹配查询可以处理全文本、精确字段(日期、数字等)
![image.png](https://img-blog.csdnimg.cn/img_convert/ba22499d015f17b53c13f3e2ea82d653.png)
返回结果:
![image.png](https://img-blog.csdnimg.cn/img_convert/302dc3003ab56bc3b6d91a6641b5e7ab.png)
从结果可以看到 匹配到了id为3和为1的文档,这两个文档都含有“linux”或者“architecture”

在进行全文本字段检索的时候,match Api提供了operator和minimum_should_match参数:

  • opeartor:参数可以为“or”或者“and”来控制检索词项间的关系,默认值为“or”。所以上面例子中,只要书名中含有“linux”或者“architecture”的文档都可以匹配上
  • minimum_should_match:可以指定词项的最少匹配个数,其实可以指定为具体某个数字,但因为我们无法预估索引内容的词项数量,一般将其设置为一个百分比

image.png
返回结果:
image.png

match phrase(短语匹配)

简单来说,短语匹配会检索内容进行分词,这些分词必须全部出现在检索内容中,并且顺序必须一致,默认情况下这些词都必须连续
image.png
返回结果:
image.png
如上实例,查询书名中带有“linux kernel”短语的书本。在默认情况下,当我们搜索书名中带有“linux architecture”的时候,是无法命中文档的,因为没有书本的名字带有这个短语。这个时候可以使用stop参数来指定词项间的距离差值,即两个词项中可以含有多少个其他不相关的词语,stop默认是0
image.png
这里的stop如果为0,是没有数据的, 如果为1,返回数据为:
image.png

match phrase prefix(短语前缀匹配)

match phrase prefix与match phrase类似,但最后一个词项会作为前缀,并且匹配这个词项开头的任何词语。可以使用max_expansions参数来控制最后一个词项的匹配数量,词参数默认值值为50
image.png
返回结果:
image.png
image.png
我们可以通过设置max_expansions来限制最后一个词项的匹配个数为2。也就是说max_expansions=2的话,每个分片最多匹配2个文档,如果有3个分片,最多返回6个匹配的文档

一般来说,match_phrase_prefix api可以实现比较粗糙的自动建议功能,但要实现自动建议的功能,可以使用 Suggest Api

multi match

multi-match Api构建在match查询的基础上,可以允许在多个字段上执行相同的查询
image.png
如上示例,fields参数是一个列表,里面的元素是需要查询的字段名称。Fields中的值既可以支持以通配符方式匹配文档字段,又可以支持提升字段的权重。如 "nam" 就是使用了通配符匹配的方式,其可以匹配到书名(name)字段。而 “intro^2” 就是对书本简介字段(intro)的相关性评分乘以 2,其他字段不变。*

multi-match Api还提供了多种类型来设置其执行方式:

  1. best_fields:默认的类型
  2. most_fields: 会执行match查询并且将所有与查询匹配的文档作为结果返回
  3. phrase: 在 fields 中的每个字段上均执行 match_phrase 查询,并将最佳匹配字段的评分作为结果返回
  4. phrase_prefix:在fields中的字段上均执行 match_phrase_prefix查询,并将最佳匹配字段的评分作为结果返回
  5. cross_fields:它将所有字段当成一个大字段,并在每个字段中查询每个词,例如当需要查询英文人名的时候,可以将first_name和last_name两个字段组合作为full_name来查询
  6. bool_prefix:在每个字段上创建一个match_bool_prefix查询,并且合并每个字段的评分作为评分结果

上述的几种类型,无法就是在设置算分的方式和匹配文档的方式不一样,可以使用“type”字段来指定这些类型,以best_fiels为例,其示例如下:
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A/D转换

硬件电路模型 模数转换代码 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

10W 音频功率放大电路芯片TDA2003,可用于汽车收音机及收录机中作音频功率放大器,内部具有短路保护和过热保护等功能

TDA2003 用于汽车收音机及收录机中作音频功率放大器。 采用 TO220B5 封装形式。 主要特点&#xff1a; ⚫ 内部具有短路保护和过热保护。内部具有地线开路、电源极性接 反和负载泄放电压反冲等保护电路。 ⚫ 输出电流大。 ⚫ 负载电阻可低至 1.6 。 …

Spring注解之处理常见的 HTTP 请求

5 种常见的请求类型: GET &#xff1a;请求从服务器获取特定资源。举个例子&#xff1a;GET /users&#xff08;获取所有学生&#xff09;POST &#xff1a;在服务器上创建一个新的资源。举个例子&#xff1a;POST /users&#xff08;创建学生&#xff09;PUT &#xff1a;更新…

STM32CubeIDE基础学习-软件安装,环境搭建

STM32CubeIDE基础学习-软件介绍及环境搭建步骤 文章目录 STM32CubeIDE基础学习-软件介绍及环境搭建步骤前言第1章 STM32CubeIDE 介绍1.1 软件描述1.2 软件支持的功能及特点 第2章 STM32CubeIDE 软件安装2.1 STM32CubeIDE 软件获取方法2.2 STM32CubeIDE 软件安装步骤2.2.1 错误安…

混合注意力机制全新工作!性能表现SOTA!准确率达98.53%

在神经网络中&#xff0c;为增强模型对数据中重要特征的识别和处理能力&#xff0c;研究者们通常会同时使用不同类型的注意力机制&#xff0c;包括空间注意力、通道注意力、自注意力等。这种结合了多种不同类型注意力机制的技术就是混合注意力机制。 混合注意力机制的研究和应…

JavaScript基础2之运算符、函数

JavaScript基础 运算符一元操作符递增/递减一元加和减 布尔操作符逻辑非逻辑与逻辑或 乘性操作符乘法操作符除法操作符取模操作符 加性操作符加法操作符减法操作符 比较操作符相等操作符关系操作符 函数函数声明函数表达式箭头函数函数的实参和形参arguments 默认参数参数的拓展…

Linux 安装 Mysql 8.0

获取 Mysql 8.0 在 /usr/local下 创建mysql文件夹 mkdir mysql切换到mysql文件夹下 cd mysql下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz解压mysql tar xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz重命名…

增速放缓,小鹏却想要“飞”?

近年来&#xff0c;国产汽车“品牌团”的崛起是全球有目共睹的。 不过&#xff0c;正如唯物辩证法中矛盾论所论证的一样&#xff0c;事物间以及事物内部诸要素之间是既对立又统一的关系。诸多国产汽车品牌合力在全球打造了“中国汽车创造”这张名片的同时&#xff0c;随之而来…

LaTeX文档中文显示错误解决办法

LaTeX文档中文显示错误解决办法 如果在LaTeX文档中遇到中文显示错误&#xff0c;通常是因为文档没有正确配置以支持中文。解决这个问题的一个常见方法是使用XeLaTeX引擎编译文档&#xff0c;它天然支持UTF-8编码&#xff0c;可以很好地处理中文。同时&#xff0c;使用ctex宏包…

k8s部署mysql

&#xff08;作者&#xff1a;陈玓玏&#xff09; 一、前置条件 已部署k8s&#xff0c;服务端版本为1.21.14 二、部署mysql 拉取镜像&#xff1b; docker pull mysql将账号密码等信息写到configmap&#xff0c;创建configmap&#xff1b; apiVersion: v1 kind: ConfigM…

怎么查看员工撤回、删除的消息?

微信是没有查看撤回、删除消息的功能的。一旦好友撤回的消息&#xff0c;就只能看到提示“某某某好友撤回了一条消息”&#xff0c;并不能看到撤回的内容。 可以试试这个办法。 轻松查看撤回、删除的内容。 可在这个页面&#xff0c;查询主账号、子账号的微信号与好友的具体聊天…

OSPF多进程

路由器——>选路——>参考路由表 路由表的生成&#xff1a; 直连路由直接加入 静态路由 动态路由&#xff0c;ospf&#xff1a;选择最优加入 IGP高级特性---OSPF多进程防火墙虚拟系统引流 http://t.csdnimg.cn/mTU3nhttp://t.csdnimg.cn/mTU3n 华为文档地址&#…