Elasticsearch Java API 实现搜索功能(2) 多字段匹配

一文掌握新版ElasticSearch8.X+SpringBoot3.X+JDK17最佳实践,常见搜索API使用和性能优化 0基础快速上手ElasticSearch8.X+SpringBoot3.X+JDK17,常见API使用和性能优化 阅读详情

前言

参考自:https://blog.youkuaiyun.com/zx711166/article/details/77847120
以下内容可以参考:https://blog.youkuaiyun.com/Leige_Smart/article/details/80900642
1. client的设置和连接
2. matchPhraseQuery和matchQuery的区别
3. 搜索结果的输出
4. 【XX】代表什么意思

版本信息

Elasticsearch:5.6.9
Java:1.8.0

实现功能

多字段查询
should和must两种模式

should和must的比较

should模式:就算有一个字段没有匹配的也会有结果返回
  must模式:必须要求所有字段都匹配到,只要有一个字段不匹配就没有搜索结果 

用到的类

import java.net.InetAddress;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.elasticsearch.index.query.MatchQueryBuilder;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Scanner;

设计搜索规则

 //这里可以同时使用matchPhraseQuery和matchQuery
 MatchPhraseQueryBuilder mpq1 = QueryBuilders
                .matchPhraseQuery(【tag1】,【key1】);

 MatchQueryBuilder mpq2= QueryBuilders
                .matchQuery(【tag2】,【key2】);

 MatchQueryBuilder mpq3= QueryBuilders
                .matchQuery(【tag3】,【key3】);

 //这里设置三个字段搜索的关系
 QueryBuilder qb2 = QueryBuilders.boolQuery()
                .should(mpq1)
                .must(mpq2)
                .must(mpq3);

//这里设置索引和type以及打分规则
 SearchRequestBuilder searchRequestBuilder = client.prepareSearch(【indices】).setTypes(【type】)
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(qb2);
 SearchResponse response = searchRequestBuilder 
                .setExplain(true).get();
ElasticSearch 全文搜索之基础语法API 全文实例基于Elasticsearch7.x 这篇博客介绍ElasticSearch全文搜索的基础语法, 后续的复合搜索(bool)和过滤(filter)都是基于这些基础语法的. 全文搜索在搜索时, 会对输入的搜索文本进行分词, 然后去倒排索引中进行匹配, 只要能匹配上任意一个关键词(词项), 就可以作为结果返回. Rest API 添加全文搜索实例数据 POST /blogs/_bulk ... 阅读详情

相关推荐

ElasticSearch之匹配查询operator和minimumShouldMatch用法详解

使用场景 我现在有两个字段参与索引,文件名称和文件索引。 搜索的时候,一个关键字匹配查询两个字段。 思路分析 众所周知,匹配查询先分词再查询。 单字段查询比较简单,下边有两个例子,一个单字段,一个多字段布尔匹配查询。 假如单字段查询关键字为“万里长城真伟大”。 注意: 在这个测试过程中,我没有使用Kibana进行测试,我是直接使用java代码测试的,结果是一样的。 为什么不使用Kibana呢?原因如下: Kibana语法,每次写的时候,我都是打开Kibana文档,直接复制粘贴,改改就用,不是我吹,应该没几个

numbbe的博客 9698

java 多字段搜索,ElasticSearch-matchPhraseQuery API以搜索多个字段

Am searching for specific field which is having ngram tokenizer and am querying that field (code) using matchPhraseQuery and it is working fine.Now, i want to search with 3 field. How can we do this.?...

weixin_39893042的博客 1002

如何把ORCAD 中的修改同步到PADS 中

Generate ECO file(*.eco),eco 文件的默然保存地址是在pads 的。ECO Files (*.eco),接着在文件中找到所生成的eco 文件,找到。再下来是产生eco 文件,先打开old_design.pcb,然后选择。PCB Design 前面的选项选中,意思把当前文件做为原始的比对。安装目录下(可修改eco 文件的保存目录),这里把eco 文件保存。接下来用新生成asc 文件的文件产生新的PCB 文件,新生成。不对新生成的pcb 做任何的修改,直接保存文件,这里把新文件。

智光工作室 993

es QueryBuilders

es

weixin_54083813的博客 4746

滤波算法-呼吸心跳信号检测方法(四)

呼吸心跳信号检测系列文章:信号滤波处理

yjh_2019的博客 6269

基于开源项目构建 CFS(网络靶场实战演练)平台

摘要:构建CFS网络靶场可使用多个开源组件组合,包括EVE-NG/GNS3或ContainerLab构建网络环境,Kasm提供工作空间,CALDERA+Atomic Red Team实现攻击模拟,DetectionLab建立防御环境,Malcolm/Arkime进行流量监控,CyRIS提供编排框架,Vulhub/DVWA创建漏洞靶标。关键在于通过API深度集成各组件,同时需注重安全隔离、资源规划及维护成本。建议开发统一管理平台,结合Ansible/Terraform实现自动化部署,打造定制化实战演练环境。(

深山技术宅的博客 1846

elasticsearch查询QueryBuilders详解(es7.80)

1 QueryBuilders.matchQuery(“supplierName”,param) 会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到。 分词后精确查询 2 QueryBuilders.matchPhraseQuery(“supplierName”,param) 默认使用 match_phrase 时会精确匹配查询的短语,需要全部单词和顺序要完全一样,标点符号除外。 模糊查询 3 QueryBuilders.matchPhrasePrefixQu

tyw15的博客 2万+

2025_NIPS_Grounded Reinforcement Learning for Visual Reasoning

尽管基于思维链的强化学习已在数学、编程等任务中显著提升语言模型性能,但视觉推理面临额外复杂性——需模型引导视觉注意力、解读感知输入,并将抽象推理锚定到空间证据上。本文提出ViGoRL(视觉接地强化学习),这是一种通过强化学习训练的视觉语言模型,能将每个推理步骤明确锚定到特定视觉坐标。受人类视觉决策启发,ViGoRL学会生成空间接地的推理轨迹,在每个步骤引导视觉注意力聚焦任务相关区域。当需要细粒度探索时,我们提出的多轮强化学习框架允许模型随着推理展开动态缩放至预测坐标。

c_cpp_csharp的专栏 59

es match、match_phrase、query_string和term的区别

一)text字段和keyword字段的区别 以下给出一个例子: 首先建立一个索引和类型,引入一个keywork的字段: PUT my_index { "mappings": { "products": { "properties": { "name": { "type": "keyword" } }...

Flyer的后花园 5866

【CAD二次开发】炸开所有的嵌套块

代码】【CAD二次开发】炸开所有的嵌套块。

1513

基于Linux的PCIe设备驱动开发入门到精通-- 11.2 锁机制与并发控制 (自旋锁、互斥锁) 11.3 性能瓶颈分析与优化建议

本文探讨Linux驱动开发中的性能优化方法论,重点聚焦并发控制与性能瓶颈分析。从锁机制选择(自旋锁、互斥锁等)到工具使用(ftrace、perf),详细介绍了定位锁竞争和CPU热点的实战步骤,包括ftrace事件跟踪和perf火焰图分析。针对常见性能瓶颈(CPU/内存/I/O/锁竞争),提出了锁粒度优化、无锁结构替换、中断处理优化等解决方案。强调性能优化需要理论结合实践,通过"假设-测量-验证"的循环持续迭代。为开发者提供了一套从问题定位到解决的完整方法论,助力开发高性能工业级驱动。

MHD0815的博客 127

再谈Elasticsearch全文搜索:你不知道的query_string、match、term、match_phrase的区别

再谈Elasticsearch全文搜索:你不知道的query_string、match、term、match_phrase的区别match和term区别1.term查询keyword字段2.term查询text字段3.match查询keyword字段4.match查询text字段match_phrase和query_string的区别1.match_phrase查询keyword字段2.match...

静幽水 5673

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2189

Elasticsearch - 用 Elasticsearch 实现全文搜索 步骤与示例

本文介绍了如何使用Elasticsearch实现全文搜索功能,包括环境准备、核心概念、索引创建、数据插入和查询操作。主要内容摘要: 环境安装:在本地搭建Elasticsearch单节点开发环境,并验证启动成功。 核心概念: 索引(Index)相当于数据库表 文档(Document)是JSON格式的最小数据单元 字段(Field)定义数据类型和搜索特性 数据操作: 创建索引并定义字段映射(text类型用于全文搜索,keyword用于精确匹配) 通过API插入单条和批量文档数据 全文搜索: 使用match查询实

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ElasticSearch入门(安装、核心概念、基础功能、DSL高级查询、Java APi操作ES)

官网: https://www.elastic.co/ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elastic官方宣布Elasticsearch进入Version 8,在速度、扩展、高相关性和简单性方面开启了一个全新的时代。

小丁的博客 1809

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

es elasticsearch6.x Java API 研究分享

为什么要用全文搜索搜索引擎 原因分析: 数据类型 全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。 例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。 索引的...

zhaoyang10的专栏 2041

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

分布式搜索引擎-ElasticSearch(下集)

分布式搜索引擎-ElasticSearch(下集)

Yyyy的博客 1298

ElasticSearch 是干什么的,从百度搜索、B 站搜索功能、京东搜索功能,淘宝搜索功能,理解 ElasticSearch 实现了什么功能

ElasticSearch 是干什么的,从百度搜索、B 站搜索功能、京东搜索功能,淘宝搜索功能,理解 ElasticSearch 实现了什么功能

道友 831

搜索引擎——Elasticsearch

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,**它可以快速地储存、搜索和分析海量数据。**作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。Elasticsearch:官方分布式搜索和分析引擎 | Elastic**Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和索引的。**当添加数据时,他会自动处理属性类型。

qq_52030824的博客 4160

ElasticSearch(搜索引擎)

ElasticSearch:智能搜索,分布式的搜索引擎Elaticsearch,简称为 ES, 是一个开源的高扩展的分布式全文检索引擎,特点:近乎实时的存储、检索数据;扩展性好,可以扩展到上百台服务器,处理PB级别的数据;使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能;通过简单的来隐藏Lucene的复杂性,从而让全文搜索变得简单。Lucene就是一个jar包,里面包含了各种建立倒排索引的方法,java开发的时候只需要导入这个jar包就可以开发了。

Xbu_123的博客 4668

ES8(Java API Client)查询详解

ES8(Java API Client)查询详解

Charge8的博客 1万+

ES 多字段查询

一 序 使用ES搜索相关的指标: Precision (查准率) - 尽可能返回较少的无关文档 Recall (查全率) - 尽量返回较多的相关文档 Ranking - 是否能够按照相关度进行排序 二 单属性查询 在 ES 中,Term 查询,对输入不做分词。所以除非是精准搜索不使用,大小写区别都查不出来。 通常就是使用match:(基于文本的分词,索引和搜索时都会进行分词) POST movies/_search { "query": { "match": { ..

bohu83的博客 1万+

GO学习之 搜索引擎(ElasticSearch)

使用 Go 语言操作 ElasticSearch 具有高性能、并发性和易维护性等优势,适用于需要快速、高效处理大量数据的场景。不过,也需要根据项目需求和团队技术栈的考量来决定是否选择 Go 语言来操作 ElasticSearch。

qq_19283249的博客 2132

【Elasticsearch入门到落地】18、Elasticsearch实战:Java API详解高亮、排序与分页

本文详细介绍了Elasticsearch高级搜索功能的实现方法,包括分页查询、结果排序和搜索结果高亮三大核心功能。通过Java API示例代码,展示了如何实现分页参数设置、多级排序规则配置以及关键词高亮显示,帮助构建专业高效的酒店搜索系统。文章还强调了性能优化注意事项和最佳实践,如避免深度分页、合理使用高亮功能等,为开发人员提供了全面的技术指导。

程序猿之洞 1218

Elasticsearch RESTful API入门:全文搜索实战

在文本内容中搜索语义相关的结果(非精确匹配)示例:搜索"苹果手机"也能匹配"iPhone 13 Pro"Elasticsearch通过分词+倒排索引实现高性能搜索。

✨ 欢迎来唠嗑、切磋、一起成长!👋 1515
上一篇: Elasticsearch Java API 实现搜索功能(1) 单字段匹配
下一篇: Python学习笔记6--多线程
Leige_Smart
博客等级 码龄11年 35粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值