ElasticSearchDSL

ElasticSearchDSL

      • DSL Query的分类
      • DSL Query基本语法
        • 全文检索查询:
        • 精确查询
        • 地理查询
        • 复合查询
      • elasticsearch中的相关性打分算法是什么?
      • Function Score Query
      • 复合查询 Boolean Query
      • 排序
      • 分页

DSL Query的分类

  • 查询所有:查询出所有数据,一般测试用。match_all
  • 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中进行匹配。例如:
    • match_query
    • multi_match_query
  • 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如
    • ids
    • range
    • term
  • 地理(geo)查询:根据经纬度查询。例如:
    • geo_distance
    • geo_bounding_box
  • 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件
    • bool
    • function_score

DSL Query基本语法

查询的基本语法如下:

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

match查询:全文检索查询的一种,会对用户输入内容分词,然后去倒排索引库检索,语法:

GET /indexName/_search
{"query":{"match":{"FIELD":"TEXT"}}   
}

multi_match:与match查询类似,只不过允许同时查询多个字段,语法:

GET /indexName/_search
{"query":{"multi_match":{"query":"TEXT","fields":["FIELD1" , "FIELD2"]}}   
}

match和multi_match的区别:

  • match:根据一个字段查询
  • multi_match:根据多个字段查询,参与查询字段越多,查询性能越差
精确查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词

term查询:

GET /indexName/_search
{"query":{"term":{"FIELD":{"value":"VALUE"}}}
}

range查询:

GET /idnexName/_search
{"query":{"range":{"FIELD":{"gte":10,"lte":20}}}
}
地理查询
  • geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档
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"}}
}
复合查询

复合查询:将其他的简单查询组合起来,实现更复杂的搜索逻辑,例如:

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

elasticsearch中的相关性打分算法是什么?

  • TF-IDF:在elasticsearch5.0之前,会随着词频增加而越来越大
  • BM25:在elasticsearch5.0之后,会随着次品增加而增大,但增长曲线会趋于水平

Function Score Query

使用function score query,可以修改文档的相关性算分,根据新得到的算分排序

算分函数的结果称为function score , 将来会与query score运算,得到新算分,常见的算分函数有:

  • weight:给一个常量值,作为函数结果
  • field_value_factor:用文档中的某个字段值作为函数结果
  • random_score:随机生成一个值,作为函数结果
  • script_score:自定义计算公式,公式结果作为函数结果

甲醛模式,定义functionscore与queryscore的运算方式,包括:

  • multiply:两者相乘。默认就是这个
  • replace:用function score替换query score
  • 其他:sum、avg、max、min

function score query定义的三要素是什么

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

复合查询 Boolean Query

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:

  • must:必须匹配每个子查询,类似“与”
  • should:选择性匹配子查询,类似“或”
  • must_not:必须不匹配,不参与算分,类似“非”
  • filter:必须匹配,不参与算分

排序

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

分页

from+size:

  • 优点:支持随机翻页
  • 缺点:深度分页问题,默认查询上限(from+size)是10000
  • 场景:百度、京东、谷歌这样的随机翻页搜索

after search:

  • 优点:没有查询上限(单词查询的size不超过10000)
  • 缺点:只能向后逐页查询,并且搜索结果是非实时的
  • 场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

scroll:

  • 优点:没有查询上限
  • 缺点:会有额外内存消耗,并且搜索结果是非实时的
  • 场景:海量数据的获取和迁移。

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

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

相关文章

verilog常量及parameter和localparam介绍

目录 整数 X 和 Z 下划线 参数 parameter 代码示例 整数 整数可以用二进制 b 或 B ,八进制 o 或 O ,十进制 d 或 D ,十六进制 h 或 H 表示,例如, 8’b00001111 表示 8 位位宽的二进制整数,…

JavaSE——常用API进阶二(7/8)-DateTimeFormatter、Period、Duration(常见方法、用法示例)

目录 DateTimeFormatter 主要方法 用法示例 Period 常见方法 用法示例 Duration 常见方法 用法示例 接下来继续要学习的是JDK 8之后新增的代替SimpleDateFormat的一个API——DateTimeFormatter 同样是用来格式化和解析时间的,与SimpleDateFormat相比较来说…

CV 面试指南—深度学习知识点总结(5)

本期专栏文章: CV 面试指南—深度学习知识点总结(1)CV 面试指南—深度学习知识点总结(2)CV 面试指南—深度学习知识点总结(3)CV 面试指南—深度学习知识点总结(4)CV 面试指南—深度学习知识点总结(5)

抖音小程序-小玩法(学习笔记)

现在非常流行小程序,当然自媒体直播也是现在最流行的,当我们看直播时可能看到各种的互动玩法,接下来我以一个开发者的角度,来玩玩怎么写一些小玩法 很多时候在没有玩过的东西来说最好的办法就是看用户手册,程序也一样,但是很遗憾抖音对于小玩法就只有简单的一些介绍,对于…

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

1、上一节课我们学习了MQTT producer 生产者步骤,MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据,该步骤和kafka consumer 一样可以处理实时数据交互,如下图所示: 2、双击步骤打开MQTT consumer 配置窗口&a…

ROS下机器人系统仿真及部分SLAM建图

文章目录 一、 Launch文件使用二、 参考资料三、 遇到的问题四、 效果演示五、相关代码5.1 一些简介5.2 机器人模型5.2.1 机器人底盘5.2.2 摄像头5.2.3 雷达 5.3 惯性矩阵 六、代码传送门实验结果及分析 温馨提示:如果有幸看到这个文章,不要看里面的内容…

java-单列集合List详解

一、List概述 ​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象,它们共享 Collection 接口中定义的所有方法。 List集合的特点: 1、有序:存和取得元素顺序一致 2、有索引&#xf…

使用FPGA实现比较器

介绍 比较器就是通过比较输入的大小,然后输出给出判断。 在这个比较器中,有两个输入,三个输出。根据输出就可以判断出哪个输入值大了。 设计文件 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity compa…

UE5 android package

1. plug 里删除所有IOS插件; 2.jdk11必须; 3.setting -windows-compiler Version 设置成你的版本; 4.andorid 变绿; 5.target SDK version :34; 6.package game date inside apk? check 7.allow large OBB files c…

【大语言模型LLM】-使用大语言模型搭建点餐机器人

关于作者 行业:人工智能训练师/LLM 学者/LLM微调乙方PM发展:大模型微调/增强检索RAG分享国内大模型前沿动态,共同成长,欢迎关注交流… 大语言模型LLM基础-系列文章 【大语言模型LLM】-大语言模型如何编写Prompt?【大语言模型LL…

zabbix监控华为网络设备路由器eNSP(3)

如果有没搭建zabbix的网友可以先看我上一个搭建文档,把监控系统搭建上https://blog.csdn.net/weixin_72819498/article/details/137751059 拓扑图: 绑定和服务器同地址的网卡 1.监控端配置 (1)SNMP服务安装 [rootzbx-server ~]# yum -y install net-…

Qt——Qt网络编程之TCP通信服务器端的实现(使用QTcpServer、QTcpSocket实现一个TCP服务器端例程)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》

数据仓库、数据中台、大数据平台的关系?

一、数据中台 数据中台是一个数据运营的概念,主要功能是将跨领域的数据集中聚合和治理,将其抽象为服务,提供具有业务价值的逻辑概念。 相较于传统的大数据平台,数据中台是升级版的概念,并不再简单地将各个功能混在一起…

编译一个基于debian/ubuntu,centos,arhlinux第三方系统的问题解答

如果是开机卡boot注意看前面几行会有错误提示,一般会比较好找,下面是过了kernel内核加载后出现的问题 目录 上一篇文章 第一个问题 错误原因 解决办法 第二个问题 注意 第三个问题 上一篇文章 编译一个基于debian/ubuntu,centos,arhlinux第三方系…

CloudCompare 二次开发(28)——最小二乘拟合空间直线

目录 一、概述二、代码集成三、结果展示一、概述 使用CloudCompare与PCL实现的最小二乘拟合直线。具体计算原理见:PCL 最小二乘拟合空间直线。 二、代码集成 1、mainwindow.h文件public中添加: void doActionPCLLeastSquareFit3DLine(); // 最小二乘拟合空间直线2、mainw…

什么是0-day漏洞,怎么防护0-day漏洞攻击

随着信息技术的快速发展,网络安全问题日益凸显,其中0day漏洞攻击作为一种高级威胁手段,给企业和个人用户带来了极大的风险。下面德迅云安全就对0day漏洞攻击进行简单讲解下,并分享相应的一些安全措施,以期提高网络安全…

第15届蓝桥杯题解

A题 结果:2429042904288 思路很简单 前20个数分别是 20 24 40 48 60 72 80 96 100 120 140 144 160 168 180 192 200 216 220 240 第2 4 6 8 12 ...n个数分别是24的 1倍 2倍 3倍 4倍 6倍 n/2倍 所以第202420242024 个数就是 24的 101210121012倍 B题 答案&am…

二维前缀和与差分

前言 延续前面所讲的一维前缀和以及差分,现在来写写二维前缀和与差分 主要这个画图就比前面的一维前缀和与差分复杂一点,不过大体思路是一样的 一维和二维的主要思路在于一维是只针对对一行一列,而二维是针对与一个矩阵的 好吧&#xff0…

flutter组件 ThemeData

这里只讲组件的定义&#xff0c;需要各位自己去尝试。 ThemeData({// 常规配置Iterable<Adaptation<Object>>? adaptations, // 定义主题自适应方案的列表。bool? applyElevationOverlayColor, // 是否应用海拔叠加颜色。NoDefaultCupertinoThemeData? cuperti…

从零开始精通RTSP之深入理解RTP协议

概述 RTP&#xff0c;即实时传输协议&#xff0c;英文全称为Real-Time Transport Protocol&#xff0c;是一种用于在互联网上传输视频、音频等实时数据的网络协议。RTP本身不提供任何服务质量保证&#xff0c;而是依赖于底层传输协议&#xff08;比如&#xff1a;UDP&#xff0…