ElasticSearch学习4--复杂查询

1、查询分类

  1. 查询所有:查询出所有数据,一般测试用。例如:match_all
  2. 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:

        match_query 根据单个字段查询
        multi_match_query  根据多个字段查询

        3.精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:

                ids  根据id查询
                range   根据范围查询
                term     精确查询
     4.地理(geo)查询:根据经纬度查询。例如:
                geo_distance   
                geo_bounding_box
     5.复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
                bool
                function_score

基本语法:

GET /indexName/_search
{"query": {"查询类型": {"查询条件": "条件值"}}
}

2、查询所有

注意:因为性能问题,查询到的结果页面显示的不是全部。

 3、全文检索查询

match查询

:会对用户输入内容进行分词,然后去倒排索引库检索,只根据一个查询字段中是否包含用户输入的词分词后的词

比如用户输入赎吧安居客,先分词成赎吧和安居客两个词,然后查询fileId字段中包含赎吧和安居客其中任意一个词的文档

 先分词后查询

 multi_match查询

:多个字段查询,也是先对用户输入分词,分词后查询多个字段中任意一处符合即可

如输入B端赎吧,查询字段是 "fields": ["fileId","caseDes"],就是fileId和caseDes中只要有一处包含B端或赎吧即可返回

 copy_to属性

multi_match:根据多个字段查询,参与查询字段越多,查询性能越差,所以常用的是会将常参与查询的字段复制到一个字段中,如下将title字段和content字段拷贝到full_text字段中,查询时仅查询full_text字段即可,full_text字段并不存在,只是一种关联关系,可参与查询

copy_to属性是用来将一个字段的内容复制到另一个字段中的。这样可以实现对同一个文档的多个字段进行索引和搜索,适用于需要对特定字段进行更详细的搜索或分析的情况

PUT my_index
{"mappings": {"properties": {"title": {"type": "text","copy_to": "full_text"},"content": {"type": "text","copy_to": "full_text"},"full_text": {"type": "text"}}}
}

4、精确查询

term 精确查询

主要用来查询不能分词的字段

根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段

查询oa名称为lilan04的文档,如果查询oa为lilan的查询不到数据

 range范围查询

主要用来查询范围内的数据,根据数值范围查询,可以是数值、日期的范围

 5、地理位置查询

geo_distance:查询到指定中心点小于某个距离值的所有文档

geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档

// geo_bounding_box查询
GET /indexName/_search
{"query": {"geo_bounding_box": {"FIELD": {"top_left": {"lat": 31.1,"lon": 121.5},"bottom_right": {"lat": 30.9,"lon": 121.7}}}}
}
// geo_distance 查询
GET /indexName/_search
{"query": {"geo_distance": {"distance": "15km","FIELD": "31.21,121.5"}}
}

6、复合查询

复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑

Function Score Query

fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名。例如百度竞价

相关性算分:

当我们利用match查询时,文档结果会根据与搜索词条的关联度打分(_score),返回结果时按照分值降序排列。

function score query定义的三要素:

  1. 过滤条件:哪些文档要加分
  2. 算分函数:如何计算function  score
  3. 加权方式:function score 与 query score如何运算

 

Boolean Query

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
must:必须匹配每个子查询,类似“与”
should:选择性匹配子查询,类似“或”
must_not:必须不匹配,不参与算分,类似“非”
filter:必须匹配,不参与算分

如下:查询oa是lilan04时间在2023-01-01 -2023-08-15不能是已删除的文档信息

GET /case_management/_search
{"query": {"bool": {"must": [{"match": {"oa": "lilan04"}}],"should": [{"range": {"editTime": {"gte": 1684740000000,"lte": 1684740070219}}}],"filter": {"term": {"isDelete": "1"}}}},"from": 100,"size": 20
}

7、搜索结果处理

排序

elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。

 按编辑时间排序

 分页

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。
elasticsearch中通过修改from、size参数来控制要返回的分页结果

针对深度分页,ES提供了两种解决方案,官方文档:
search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。
scroll:原理将排序数据形成快照,保存在内存。官方已经不推荐使用。

高亮

高亮:就是在搜索结果中把搜索关键字突出显示

将搜索结果中的关键字用标签标记出来
在页面中给标签添加css样式

GET /books/_search
{"query": {"match": { "title": "javascript" }},"highlight": {"require_field_match": false,"fields": {"fieldTitle": {"pre_tags": ["<strong>"],"post_tags": ["</strong>"]},"fieldContent": {"pre_tags": ["<strong>"],"post_tags": ["</strong>"]}}}
}

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

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

相关文章

yolov8机器视觉-工业质检

使用训练好的模型进行预测 yolo predict taskdetect model训练好的模型路径 source测试图片文件夹路径 showTrue效果展示 切换模型进行训练&#xff08;yolov8s&#xff09; 修改main.py训练参数文件 使用云gpu进行训练&#xff0c;很方便&#xff1a;点击链接转至在线云gpu…

面试被打脸,数据结构底层都不知道么--回去等通知吧

数据结构之常见的8种数据结构&#xff1a; -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义&#xff1a; -是一种线性表&#xff0c;并不会按线性的顺序存储数据&#xff0c;即逻辑上相邻…

【算法竞赛宝典】语言之争

【算法竞赛宝典】语言之争 题目描述代码展示 题目描述 代码展示 //语言之争 #include<fstream> #include<string>using namespace std;ifstream cin("language.in"); ofstream cout("language.out");string a; int n;int main() {int i;bool …

短信验证码服务

使用的是 阿里云 阿里云官网 1.找到 左上角侧边栏 -云通信 -短信服务 2.在快速学习测试处 &#xff0c;按照步骤完成快速学习&#xff0c;绑定要测试的手机号&#xff0c;选专用 【测试模板】&#xff0c;自定义模板需要人工审核&#xff0c;要一个工作日 3.右上角 获取 Acces…

敦煌网、newegg店铺优化三大方法,测评补单原来可以这样做

我们都知道敦煌网、newegg流量是一个店铺的血液&#xff0c;没有流量的支撑&#xff0c;其他也都将成为浮云。流量能够成为转化率的保证&#xff0c;如何让店铺拥有傲人的流量成为重要之重&#xff0c;店铺的流量又主要来源于以下几部分&#xff1a; 一、主要流量的来源 1.搜索…

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

【unity插件】使用BehaviorDesigner插件制作BOSS的AI行为树

文章目录 前言素材插件一、基础使用二、敌人物理攻击三、敌人面向玩家四、敌人法术攻击五、随机进行攻击六、敌人不同的阶段推荐学习视频源码完结 前言 Behavior Designer是一个行为树插件&#xff0c;是一款为了让策划&#xff0c;程序员&#xff0c;美术人员方便使用的可视化…

再谈IOS开发环境配置(2023-09-01 新)

关于IOS的开发&#xff0c;需要配置证书、密钥、管理标识符、功能配置等等&#xff0c;很是繁杂&#xff0c;以前也配置过&#xff0c;这次因为重新购买了新的M1笔记本&#xff0c;准备重新配置下&#xff0c;顺便记录&#xff0c;以便查询。 如果要开发IOS&#xff0c;首先需要…

Midjourney学习(一)prompt的基础

prompt目录 sd和mj的比较prompt组成风格表现风格时代描述表情色彩情绪环境 sd和mj的比较 自从去年9月份开始&#xff0c;sd就变得非常或火&#xff0c;跟它一起的还有一个midjourney。 他们就像是程序界的两种模式&#xff0c;sd是开源的&#xff0c;有更多的可能性更可控。但是…

c#多线程—基础概念到“双色球”项目实现(附知识点目录、代码、视频)

总结&#xff1a;视频中对于多线程讲的非常透彻&#xff0c;从线程基础概念—>.net不同版本出现的线程方法—>多线程常出现问题—>双色球项目实践&#xff0c;每个知识点都有代码实操&#xff0c;受益匪浅。附上学习笔记和实操代码。 视频 目录 一、线程、进程概念及优…

华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)

以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。

Linux内核源码分析 (5)多处理器调度

Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注&#xff1a;本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA &#xff08;非一致内存访问结构&#xff09; 二、多核调度三、调度域和调度组四、SMP调度详…

数据结构基本概念

一、数据 数据对象-数据元素-数据项(属性)&#xff0c;前者由后者组成 二、数据结构 定义&#xff1a;按某种关系的数据元素的集合 三、数据类型 1、原子类型&#xff08;例如整型&#xff09; 2、结构类型&#xff08;由原子类型组成&#xff0c;例如数组&#xff09; 3、…

ReID网络:MGN网络(4) - Loss计算

1. MGN Loss MGN采用三元损失(Triplet Loss)。 三元损失主要用于ReID算法&#xff0c;目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失&#xff0c;主要原因在于在训练中&#xff0c;参与计算Loss的分别有Anchor、Positive和Negative三方。 2. Triplet Lo…

力扣:82. 删除排序链表中的重复元素 II(Python3)

题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - …

ChatGPT插件的优缺点

虽然西弗吉尼亚大学的研究人员看到了最新的官方ChatGPT插件——名为“代码解释器”&#xff08; Code Interpreter&#xff09;的教育应用潜力&#xff0c;但他们也发现&#xff0c;对于使用计算方法处理针对癌症和遗传疾病的定向治疗的生物数据的科学家来说&#xff0c;这款插…

[C/C++]指针详讲-让你不在害怕指针

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

Java for循环每次都通过list.size()和 string.length()获取大小性能

有人说在for循环之前用一个局部变量先获取到list.size()、str.length()&#xff0c;然后在for循环的判断条件里通过这个局部变量替换list.size()、str.length()会节省数据计算的时间。事实真的是这样吗&#xff1f;下面就为大家解答这个问题。 说明&#xff1a;此文章针对Andro…

华为云云服务器评测|基于华为云云耀云服务器L实例开展性能评测,例如 MySQL、Clickhouse、Elasticsearch等等

在当今云计算时代&#xff0c;越来越多的企业和个人开始选择将应用部署在云服务器上&#xff0c;以便更好地满足高性能、可靠性和可扩展性等需求。而华为云云耀云服务器L实例不仅提供了高性能和可靠性的计算和存储资源&#xff0c;而且具有灵活和高效的成本控制&#xff0c;深受…

DDR2 IP核调试记录1

一、IP核生成不成功可能原因 1、打开 Quartus II 软件时&#xff0c;请右键选择以管理员方式运行&#xff0c;切记&#xff0c;否则可能导致 IP 生成不成功。 2、创建工程时不要将工程创建在和 Quartus II 安装目录相同的盘符下&#xff0c;否则可能导致生产 IP 失败。 3、如果…