JAVA使用ElasticSearch查询in和not in的实现方式

当我们使用Java对Elasticsearch进行查询时,经常会涉及到innot in这两种条件查询,本文将介绍如何使用Java实现这两种条件查询。

Elasticsearch in查询的实现

首先,我们需要导入相关的依赖库:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.3.1</version>
</dependency>

然后,我们需要创建一个org.elasticsearch.index.query.TermsQueryBuilder对象,并将它添加到org.elasticsearch.index.query.BoolQueryBuilder对象中。具体实现代码如下:

List<String> values = Arrays.asList("value1", "value2", "value3");
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field", values);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().must(termsQueryBuilder);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));

其中,values是一个包含需要查询的值的列表,field是需要查询的字段名,index_name是需要查询的索引名称。

下面是一个完整的示例代码,该示例从名为test_index的索引中查询field_name字段中有value1value2value3的文档:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
List<String> values = Arrays.asList("value1", "value2", "value3");
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field_name", values);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().must(termsQueryBuilder);
SearchRequest searchRequest = new SearchRequest("test_index");
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

Elasticsearch not in查询的实现

要实现not in查询,我们可以使用range查询和相应的逻辑操作符。具体实现代码如下:

List<String> values = Arrays.asList("value1", "value2", "value3");
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field", values);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().mustNot(termsQueryBuilder);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));

其中,mustNot方法用于构建一个not in的查询条件。

下面是一个完整的示例代码,该示例从名为test_index的索引中查询field_name字段中不包含value1value2value3的文档:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
List<String> values = Arrays.asList("value1", "value2", "value3");
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field_name", values);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().mustNot(termsQueryBuilder);
SearchRequest searchRequest = new SearchRequest("test_index");
searchRequest.source(new SearchSourceBuilder().query(boolQueryBuilder));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

以上就是使用Java实现Elasticsearch in和not in查询的完整攻略,包含两条示例说明,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA使用ElasticSearch查询in和not in的实现方式 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Servlet 与 Ajax 交互一直报status=parsererror的解决办法

    下面我将详细讲解“Servlet 与 Ajax 交互一直报status=parsererror的解决办法”的完整攻略。 问题描述 在使用 Ajax 调用 Servlet 时,有时会出现 status=parsererror 的错误提示。这时候 Ajax 请求无法正常获取到返回的数据,进而无法正确渲染页面。这种错误的出现原因一般是 Ajax 发送的请求将 Se…

    云计算 2023年5月17日
    00
  • 终于有人把云计算、大数据和人工智能讲明白了! (2)

    此文已由作者刘超授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 3大数据时代,众人拾柴火焰高 当数据量很小时,很少的几台机器就能解决。慢慢的,当数据量越来越大,最牛的服务器都解决不了问题时,怎么办呢?这时就要聚合多台机器的力量,大家齐心协力一起把这个事搞定,众人拾柴火焰高。 对于数据的收集:就IoT来讲,外面部署这成千上万的检测设备…

    云计算 2023年4月11日
    00
  • 一篇文章看懂大数据分析就业前景及职能定位、职能要求

    一篇文章看懂大数据分析就业前景及职能定位、职能要求 1. 大数据分析就业前景 随着互联网的快速发展,大数据分析成为IT行业中的热门岗位之一,其就业前景非常广阔。据国内招聘网站提供的数据,从2019年开始,大数据分析师的薪资不断攀升,其就业市场供需状况非常乐观。 2. 大数据分析职能定位 大数据分析师主要负责数据处理、分析和解释,把数据转化成具有商业或战略意义…

    云计算 2023年5月18日
    00
  • 云计算新模式将终结传统外包模式[转]

    未来五年内,我们现在所熟悉的外包模式将会消失。大量的印度外包服务提供商要么会被迫退出市场,要么就逃不脱被吞并的命运。而欧美企业如果还在涉足传统外包领域的话,也将会遭遇同样的命运,除非他们赶紧觉醒。那么在新的模式中,谁将会成为新的领导者呢?我们认为,谷歌和亚马逊这样的企业将会成为新型外包模式的知名品牌。   你觉得此话有些荒唐?那只能表明你没有跟紧IT业的发展…

    云计算 2023年4月12日
    00
  • 【Linux云计算架构:第一阶段-Linux操作系统入门到精通】第20章——条件判断和流程控制语句If

    本节所讲内容:20.1 read命令键盘读取变量的值20.2 流程控制语句if20.3 test测试命令20.4 流程控制过程中复杂条件和通配符20.5 实战-3个shell脚本实战 20.1 read命令键盘读取变量的值从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在re…

    云计算 2023年4月13日
    00
  • 币安智能链有哪些币?币安智能链代币介绍

    币安智能链是基于Binance的分布式区块链系统,币安智能链(Binance Smart Chain)和币安链是Binance推出的两个区块链系统。币安智能链上面开发的代币称为BEP-20代币,BEP代表Binance Smart Chain上的代币标准。 币安智能链有很多的代币,但是大多数的代币都是基于以太坊开发的ERC-20转移到币安智能链,这里我们只讲…

    云计算 2023年5月17日
    00
  • Jupyter notebook快速入门教程(推荐)

    以下是关于 Jupyter notebook 快速入门教程的完整攻略。 1. 简介 Jupyter Notebook 是一款强大的交互式开发环境。Jupyter 是 Julia、Python 和 R 三种编程语言的集合体,它将代码、文本、数据分析结果和可视化内容集成到一个可自包含的文档中,具有简便、灵活和互动性强的特点。 2. 安装和启动 2.1 安装 安装…

    云计算 2023年5月18日
    00
  • 云原生:云计算时代命题之终极解决方案

    https://blog.csdn.net/broadview2006/article/details/80131068   2017年08月17日 14:35:05     Cloud Native?云原生?很多人一看到这个词就懵了,到底什么是云原生?   云原生这个词其实由来已久,IT行业永远也不缺乏新概念。2015 年,Pivotal公司的Matt S…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部