es的检索-DSL语法和Java-RestClient实现

news2025/1/17 6:03:06

基本语法

GET /索引库名/_search
{
  "query": {
    "查询类型": {"查询条件"}
  }
}

RestClient的导入在RestClient操作索引库和文档有介绍

查询所有

# 查询所有
GET /test/_search
{
  "query": {
    "match_all": {}
  }
}
SearchRequest request = new SearchRequest("test");
request.source().query(QueryBuilders.matchAllQuery());
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

全文检索查询
对用户输入的内容进行分词,然后去倒排索引库进行检索,常用于搜索框

# match查询
GET /test/_search
{
  "query": {
    "match": {
      "字段": "文本"
    }
  }
}
SearchRequest request = new SearchRequest("test");
request.source().query(QueryBuilders.matchQuery("字段","文本"));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits().value);
# mutil_match查询
GET /test/_search
{
  "query": {
    "multi_match": {
      "query": "文本",
      "fields": ["字段1", "字段2", ...]
    }
  }
}

一般情况下,多字段查询都会copy_to到一个字段中,然后使用match查询来替代multi_match查询,能够提高查询效率。
精确查询
精确查询不会对搜索条件进行分词,一般查找keyword,数值,日期,boolean等字段。

  • trem:根据词条精确查找,类似于mysql的=
  • range:根据词条的范围查询。gt gte lt lte分别是大于 大于等于 小于 小于等于
# term查询,查找price是8的文档
GET /test/_search
{
  "query": {
    "term": {
      "price": {
        "value": "8"
      }
    }
  }
}
# 查询price大于10并且小于20的文档
GET /test/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}
SearchRequest request = new SearchRequest("test");
request.source().query(QueryBuilders.termQuery("字段","文本"));
request.source().query(QueryBuilders.rangeQuery("price").gt(1).lt(5))
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response.getHits().getTotalHits().value);

Function Score Query
我们在使用match查询的时候,展示的文档的顺序会根据改文档与搜索词条的相关性(抽象为一个分数,es进行打分)进行排序。
而常见的相关性算法是TF-IDF和BM25:![[Pasted image 20240622183749.png]]
在es5.0之前使用的是TF-IDF算法,而之后使用的是BM25算法。随着词频的增加,TF-IDF会无限变大,而BM25就比较稳定。
Function Score Query,可以修改文档的相关性算分。
在这里插入图片描述

复合查询(Boolean Query)
![[Pasted image 20240623163913.png]]

SearchRequest request = new SearchRequest("test");
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchAllQuery());// boolQuery.must(QueryBuilders.matchQuery("all", key));
boolQuery.filter(QueryBuilders.termQuery("字段","文本"));
String sortBy = params.getSortBy();
if (!sortBy.equals("default")) {
    request.source().sort(sortBy);
}
request.source().query(boolQuery);
Integer size = params.getSize();
Integer page = params.getPage();
request.source().from((page - 1) * size).size(size);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

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

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

相关文章

Linux操作系统段式存储管理、 段页式存储管理

1、段式存储管理 1.1分段 进程的地址空间:按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名(在低级语言中,程序员使用段名来编程),每段从0开始编址。内存分配规则:以段为单位进行分配…

【高考选专业 | 家长篇】2024,计算机何去何从?小P老师带你看

目录 2024年,计算机相关专业还值得选择吗?1.行业竞争现状2.专业前景分析 2024年,计算机相关专业还值得选择吗? 随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。有人欢喜&#x…

2024最新版:C++用Vcpkg搭配VS2022安装matplotlib-cpp库

matplotlib-cpp是一个用于在C中使用matplotlib绘图库的头文件库。它提供了一个简单的接口,使得在C中创建和显示图形变得更加容易。这个库的灵感来自于Python的matplotlib库,它使得在C中进行数据可视化变得更加便捷。 matplotlib-cpp允许在C中使用类似Py…

linux使用docker部署kafka集群

1、拉取kafka docker pull wurstmeister/kafka docker pull wurstmeister/zookeeper 2、创建网络 docker network create app-kafka 3、启动zookeeper docker run -d \--name zookeeper \-p 2181:2181 \--network app-kafka \--restart always \wurstmeister/zookeeper …

Java基础的重点知识-06-String、Arrays、Math、static关键字

文章目录 String类(java.lang)static关键字Arrays类(java.uitl)Math类(java.lang) String类(java.lang) java.lang.String 类代表字符串。 特征: 字符串不变:字符串的值在创建后不能被更改。因为String对象是不可变的&#xff…

【2024德国签证】资金证明详解|从线上开户到签证申请超详细指南!

保证金介绍 1.什么是德国保证金(自保金 Sperrkonto)? 来自非欧洲国家的国际学生必须提供经济资金证明,以证明你能支持你在德国的生活和学习。 保证金用途:非欧盟国家的公民,需要签证来德国,必…

安徽理工大学2计算机考研情况,招收计算机专业的学院和联培都不少!

安徽理工大学(Anhui University of Science and Technology),位于淮南市,是安徽省和应急管理部共建高校,安徽省高等教育振兴计划“地方特色高水平大学”建设高校,安徽省高峰学科建设计划特别支持高校&#…

C++初学者指南第一步---13.聚合类型

C初学者指南第一步—13.聚合类型 文章目录 C初学者指南第一步---13.聚合类型1. 类型分类(简化)2. 如何定义和使用3. 为什么选择自定义类型/数据聚合?4. 聚合类型初始化5.混合6. 复制7. 值和引用的语义8.聚合的向量(std::vector)9.最令人烦恼的…

python使用pywebview打造一个现代化的可视化GUI界面

🌈所属专栏:【python】✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的…

不使用ES,如何使用MySQL实现模糊匹配

1.业务场景 例如:我们实现一个公司的申请审批流程,整个业务流程涉及到两种角色,分别是商务角色与管理员角色,整个流程如下图所示: 核心流程总结为一句话:商务角色申请添加公司后由管理员进行审批。 商务在…

Android中如何动态的调整Dialog的背景深暗

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 在 Android 开发中,当你使用 Dialog 或 DialogFragment 时,可以通过设置 Window 的背景变暗来突出它的可见性。这个效果…

数据虚拟化、Data Fabric(数据编织)的兴起,对数据管理有何帮助?

数字化时代,虚拟化(Virtualization)并不是一个很陌生的词汇,它是现代数据中心资源管理的核心技术之一,是对 IT 资源(如服务器、存储设备、网络设备等)的抽象,通过屏蔽 IT 资源的物理…

C语言入门4-函数和程序结构

函数举例 读取字符串&#xff0c;如果字符串中含有ould则输出该字符串&#xff0c;否则不输出。 #include <stdio.h>// 函数声明 int getLine(char s[], int lim); int strindex(char s[], char t[]);int main() {char t[] "ould"; // 要查找的目标子字符串…

windows和linux路径斜杆转换脚本,打开即用

前言&#xff1a; windows和linux的目录路径斜杆是相反的&#xff0c;在ssh或者其他什么工具在win和ubuntu传文件时候经常需要用到两边的路径&#xff0c;有这个工具就不用手动去修改斜杆反斜杠了。之前有个在线网站&#xff0c;后来挂了&#xff0c;就想着自己搞一个脚本来用。…

批量重命名神器揭秘:一键实现文件夹随机命名,自定义长度轻松搞定!

在数字化时代&#xff0c;我们经常需要管理大量的文件夹&#xff0c;尤其是对于那些需要频繁更改或整理的文件来说&#xff0c;给它们进行批量重命名可以大大提高工作效率。然而&#xff0c;传统的重命名方法既繁琐又耗时&#xff0c;无法满足高效工作的需求。今天&#xff0c;…

【C++】初始化列表、匿名对象、static成员、友元、内部类

文章目录 一、初始化列表构造函数体赋值初始化列表explicit关键字 二、匿名对象三、static成员四、友元友元函数友元类 五、内部类六、练习题 一、初始化列表 构造函数体赋值 实际上&#xff0c;构造函数的函数体内&#xff0c;并不是对 对象 初始化的地方&#xff0c;而是对…

电子杂志制作的必备软件:轻松提升制作效率

​电子杂志作为一种新型的媒体形式&#xff0c;具有互动性强、内容丰富、传播范围广等特点。随着互联网的普及&#xff0c;越来越多的企业和个人开始关注和投入电子杂志的制作。然而&#xff0c;电子杂志的制作过程往往复杂繁琐&#xff0c;需要付出大量的时间和精力。为了提高…

微信小程序学习(六):常用原生 API

&#x1f517;API官方文档 1、网络请求 wx.request({// 接口地址&#xff0c;仅为示例&#xff0c;并非真实的接口地址url: example.php,// 请求的参数data: { x: },// 请求方式 GET|POST|PUT|DELETEmethod: GET,success (res) {console.log(res.data)},fail(err) {console.…

本地离线模型搭建指南-本地运行显卡选择

搭建一个本地中文大语言模型&#xff08;LLM&#xff09;涉及多个关键步骤&#xff0c;从选择模型底座&#xff0c;到运行机器和框架&#xff0c;再到具体的架构实现和训练方式。以下是一个详细的指南&#xff0c;帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针 0. 引言1. 关于m_scale2. 关于m_ruler3. 关于m_northarrow4. 结语 0. 引言 本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。 1. 关于m_scale m_scale用于图件…