elasticsearch 跨索引联合多条件查询

news2024/11/14 10:56:13

文章目录

    • Elasticsearch
    • 需求
    • 使用版本
    • 联合索引多条件查询示例
    • 相关API
    • 相关资料

在这里插入图片描述

Elasticsearch

Elasticsearch 是一个免费且开放的分布式搜索和分析引擎。适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

Elasticsearch 用来收集大量日志和检索文本是个不错的选择,可以在承载了 PB 级数据的成百上千台服务器上运行。

关键字:

  • 实时
  • 分布式
  • 搜索
  • 分析

需求

如果既要对一些字段进行分词查询,同时要对另一些字段进行精确查询,就需要使用布尔查询来实现了。同时索引是按照一定规则建立的,例如按照时间段,此时查询的时候会涉及到联合索引查询。布尔查询对应于Lucene的BooleanQuery查询,实现将多个查询组合起来,有三个可选的参数:

must: 文档必须匹配must所包括的查询条件,相当于 “AND”

should: 文档应该匹配should所包括的查询条件其中的一个或多个,相当于 “OR”

must_not: 文档不能匹配must_not所包括的该查询条件,相当于“NOT”

使用版本

elasticsearch:7.1.1
spring-boot-starter-data-elasticsearch:2.5.4

联合索引多条件查询示例

@Autowired
private RestHighLevelClient client;

ObjectMapper mapper = new ObjectMapper();

@Override
public Page<Book> search(Pageable pageable, Set<String> indexNameList) {
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    //must中的条件,必须全部匹配。需要将字段的type设置为keyword 或者 指定字段时用 `字段.keyword`(实际测试并不生效,可能还和analyzer有关)
    queryBuilder.must(QueryBuilders.termQuery("title", "杨"));
    //匹配should中的条件(匹配1个或多个,根据需求配置)
    queryBuilder.should(QueryBuilders.termQuery("address", "山西"));
    //matchPhraseQuery 通配符搜索查询,支持 * 和 ?, ?匹配任意单个字符,这么查询可能慢
    queryBuilder.must(QueryBuilders.matchPhraseQuery("remark", "*" + "你好" + "*"));
    //必须匹配的 should条件数量
    queryBuilder.minimumShouldMatch(1);

    //数据集合
    List<Book> hits = new ArrayList<>();
    //总数
    long total = 0L;
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
        .query(queryBuilder)
        .from(pageable.getPageNumber())
        .size(pageable.getPageSize());
    //es中存在的索引
    List<String> arrayList = getExistIndex(indexNameList);

    SearchRequest searchRequest = new SearchRequest(indexArray).source(searchSourceBuilder);
    try {
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        // 搜索结果
        org.elasticsearch.search.SearchHits searchHits = searchResponse.getHits();
        // 匹配到的总记录数
        total = searchHits.getTotalHits().value;
        org.elasticsearch.search.SearchHit[] searchHitsHits = searchHits.getHits();
        for (SearchHit searchHitsHit : searchHitsHits) {
            //如果es中字段比定义的实体类中多,反序列化会提示异常,需要加以下注解
            //忽略无法识别的属性:@JsonIgnoreProperties(ignoreUnknown = true)
            Book book = mapper.readValue(searchHitsHit.getSourceRef().utf8ToString(), Book.class);
            hits.add(book);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
//检测每个索引是否存在,只返回存在的索引
private List<String> getExistIndex(Set<String> indexNameList) {
    List<String> existsIndex = new ArrayList<>();
    for (String indexName : indexNameList) {
        try {
            GetIndexRequest existsRequest = new GetIndexRequest();
            existsRequest.indices(indexName);
            boolean exists = client.indices().exists(existsRequest, RequestOptions.DEFAULT);
            //返回索引集合中存在的索引,避免传入不存在的索引,导致查询异常
            if (exists) {
                existsIndex.add(indexName);
            }
        } catch (Exception e) {
        }
    }
    return existsIndex;
}

相关API

//查看索引结构
GET : http://127.0.0.1:9200/索引/_mapping

相关资料

https://blog.csdn.net/u011821334/article/details/100979286
https://www.cnblogs.com/coderxz/p/13268417.html
https://www.cnblogs.com/keatsCoder/p/11341835.html
https://blog.csdn.net/weixin_43847283/article/details/123616890
https://blog.csdn.net/weixin_43847283/article/details/123933244

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

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

相关文章

十分钟玩转3D绘图:WxGL完全手册

文章目录1 简介2 安装3 快速体验3.1 熟悉的风格3.2 Colorbar3.3 光照效果3.4 让模型动起来3.5 定制着色器3.6 三维曲面重建3.7 生成动画或视频文件4 在其他GUI库中使用WxGL4.1 与wxPython集成4.2 与PyQt集成5 API Reference5.1 常量5.2 函数wxgl.font_listwxgl.color_listwxgl.…

Java--反射

目录 反射 什么是反射&#xff1f; Class类 动态加载 小结 访问字段 获取字段值 设置字段值 练习 小结 调用方法 调用方法 调用静态方法 调用非public方法 多态 练习 小结 调用构造方法 小结 获取继承关系 获取父类的Class 获取interface 继承关系 小…

遗传算法优化深度信念网络DBN的分类预测,GA-DBN分类预测

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) 遗传算法的原理 遗传算法优化深度信念网络DBN的分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,本文用DBN提取特征,遗传…

如何在DevOps中进行API生命周期管理?

引言 随着DevOps理念在中国企业当中的普及和发展&#xff0c;中国企业DevOps落地成熟度不断提升&#xff0c;根据中国信通院的数据已有近6成企业向全生命周期管理迈进。而在研发全生命周期管理之中&#xff0c;API管理的地位愈发显得重要。随着API数量的大幅增长&#xff0c;也…

Java多线程编程—wait/notify机制

文章目录1. 不使用wait/notify机制通信的缺点2. 什么是wait/notify机制3. wait/notify机制原理4. wait/notify方法的基本用法5. 线程状态的切换6. interrupt()遇到方法wait()7. notify/notifyAll方法8. wait(long)介绍9. 生产者/消费者模式10. 管道机制11. 利用wait/notify实现…

【操作系统】半小时写一个微型操作系统-写一个启动扇区并且导入到软盘镜像中

一.什么是启动扇区 我们使用软盘来启动操作系统时&#xff0c;系统首先就是从软盘的第一个扇区中开始读取数据&#xff0c;也就是第0面&#xff0c;0磁道的第0个扇区&#xff0c;软盘的每个扇区为512个字节的大小&#xff0c;如果最后两个字节为0xaa55&#xff08;当BIOS看到这…

Java多线程基础面试总结(一)

进程、线程和协程 进程、线程和协程 进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位&#xff0c;因此进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。 在Java中&#xff0c;当我们启动main函数其实就是启动了一个JVM进程&…

【Linux】全新服务器Centos7环境搭建和安装

1、简介 最近服务器重装后,环境啥的则需要从头全部搞一遍,于是开始搞起环境的配置和安装 2、环境配置安装 前期准备 给目录文件加文件传输权限(发现无法上传文件,于是增加权限 $ chmod 766 /home/lj/ 配置DNS服务 #配置DNS服务,如果没有8.8.8.8需要添加 cat /etc/re…

WRF模式与Python融合技术在多领域中的应用及精美绘图教程

当今从事气象及其周边相关领域的人员&#xff0c;常会涉及气象数值模式及其数据处理&#xff0c;无论是作为业务预报的手段、还是作为科研工具&#xff0c;掌握气象数值模式与高效前后处理语言是一件非常重要的技能。WRF作为中尺度气象数值模式的佼佼者&#xff0c;模式功能齐全…

QML控件--Dialog

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.8 Inherits&#xff1a;Popup 二、控件使用 Dialog&#xff1a; 是一个弹出窗口&#xff0c;继承…

项目打包发布流程

---》》》项目打包发布 1.编译并构建项目 2.部署 npm i npm run build scp2&#xff1a;需要写代码 ---》》》 后续有空更新&#xff1a;赋几个链接&#xff1a; Jenkins官网 nullhttps://www.jenkins.io/zh/一文详解Jenkins的安装与配置Jenkins是一个基于Java开发的开源…

【SpringMVC】10—其他概念

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

2023年Web3的五大趋势

Web3 这个词有时被称为 "去中心化的互联网"&#xff0c;涵盖了一些重要的互联网发展趋势。Web3 的愿景是创造一个不受大公司控制的互联网&#xff0c;如Alibaba、baidu、Google和Facebook&#xff0c;这些公司制定了互联网的大部分规则&#xff0c;掌控着我们今天可以…

HyperWorks2021软件安装教程

下载软件 https://www.xsoftnet.com/share/a0004MWyQAg9r.html产品介绍&#xff1a; HyperWorks一款功能强大的开放式架构仿真软件。拥有先进的技术以及高性能、高效和创新的产品&#xff0c;为用户提供了设计、仿真和制造等服务。支持电磁分析设计、材料建模制造、多物理场分…

学校的地下网站(学校的地下网站1080P高清)

这个问题本身就提得有问题&#xff0c;为什么这么说&#xff0c;这是因为YouTube本身就不是一个视频网站或者说YouTube不是一个传统的视频网站&#xff01;&#xff01;&#xff01; YouTube能够一家独大&#xff0c;可不仅仅是因为有了Google 这个亲爹&#xff0c;还有一点&am…

Flutter Web 开发实践与优化

一,Flutter Web架构 目前,除了可以支持Android、iOS移动跨平台开发之外,Flutter还支持macOS、Windows、Linux和Web等多个跨平台的开发。可以说,作为一款先进的跨平台开发框架,Flutter已经真正意义上实现了“一次编写,处处运行”的美好愿景。 众所周知,Dart 语言存在之…

【建议收藏】数据库 SQL 入门——事务(内附演示)

文章目录&#x1f4da;引言&#x1f4d6;事务&#x1f4d1;事务的概念&#x1f4d1;事务操作&#x1f516;查看与设置事务提交方式&#x1f516;提交事务与回滚事务&#x1f4d1;事务的特性&#x1f4d1;并发事务问题&#x1f4d1;事务隔离级别&#x1f4cd;总结&#x1f4da;引…

8.基于拉丁超立方法的风光场景生成与削减

matlab代码&#xff1a;基于拉丁超立方法的风光场景生成与削减 摘要&#xff1a;与蒙特卡洛法不同&#xff0c;拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度&#xff0c;属于分层抽样技术&#xff0c;设定风光出力遵从正态分布normrnd&#xff0c;从…

字节面试体验值拉满~

今天分享一位读者春招的字节二面面经&#xff0c;岗位是后端开发。 一个编程语言都没问&#xff0c;都是问网络项目mysqlredis。 问题记录 使用消息中间件降低消息持久化的压力是怎么做的&#xff0c;为什么可以降低&#xff1f; 读者答&#xff1a;在突发大量消息的情况下…

水塘抽样解决随机选择问题

1.简介 水塘抽样是一系列的随机算法&#xff0c;其目的在于从包含n个项目的集合S中选取k个样本&#xff0c;其中n为一很大或未知的数量&#xff0c;尤其适用于不能把所有n个项目都存放到内存的情况。最常见例子为Jeffrey Vitter在其论文中所提及的算法R。 2.算法步骤&#xff1…