Compound Query 复合查询详解
1、 constant Query
该查询能够包含一个查询或过滤器,通过该方式将返回的文档的score设置为1, 然后通过设置boost来提高当前查询的权重(官方文档说返回的score和boost相等), 提高该查询的相关度
QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("hotelName", "酒")).boost(2f))
.should(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("hotelName", "店")).boost(1f))
应用场景: 比如匹配酒店设备:多个term 泳池,花园,wifi 比如我们要将泳池的的分值放大,则将泳池的term通过该方式包一下,并设置一个你认为合理的权重,提高泳池在酒店匹配过程的占比。
QueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("hotelName", "泳池")).boost(2f))
.should(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("hotelName", "花园")).boost(1f))
.should(QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("hotelName", "wifi")).boost(1f))
2、bool query
一种复合查询,三种逻辑关系如下 must: AND
must_not:NOT should:OR 复合查询: cityCode="chongqing_city" 并且 hotelName="hotel22"
QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("cityCode","chongqing_city")).must(QueryBuilders.matchQuery("hotelName", "hotel22"))
3、 Dis Max Query
将子查询union 到一起,没个文档的分数是 子查询中相同文档的得分最大值。 例: 北京大饭店 酒索引得分 0; 店 得分 1; 大得分1.1 最后的结果是 北京大饭店相关度得分1.1
QueryBuilders.disMaxQuery()
.add(QueryBuilders.termQuery("hotelName","酒"))
.add(QueryBuilders.termQuery("hotelName","店"))
.add(QueryBuilders.termQuery("hotelName","大"));
4、boosting query
一种复合查询,分为positive子查询和negitive子查询,两者的查询结构都会返回。 positive子查询的score保持不变,negetive子查询的值将会根据negative_boost(小于1)的值相乘,做相应程度的降低分值 hotelName 检索酒店,hotelNo 检索123 hotelNo检索获得的分值通过乘以0.3来降低分值,降低相关度
QueryBuilders.boostingQuery().positive(QueryBuilders.matchQuery("hotelName", "酒店")).negative(QueryBuilders.matchQuery("hotelNo","123")).negativeBoost(0.3f)
5、 indices Query
跨索引复合查询,实现跨索引的查询,并提供没有查询到结果是 从其他索引查询(默认是从其他所有索引进行匹配) 如下实例:从 索引1,索引2 中查询hotelName = "7天"的 term 查询。 如果没有查询到数据,从 索引3 查询hotelName = "置" 的term查询,如果没有指明索引3,默认从client下所有索引中进行匹配结果
QueryBuilder queryBuilder = QueryBuilders.indicesQuery(QueryBuilders.termQuery("hotelName", "7天"), "索引1","索引2")
.noMatchQuery(QueryBuilders.termQuery("hotelName", "置"));
System.out.println(queryBuilder);
SearchResponse response = client.prepareSearch("索引3")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.execute()
.actionGet();
分享到:
相关推荐
ES Head 插件是针对 Elasticsearch (简称 ES) 的一个非常实用的管理工具,它提供了一个基于网页的用户界面,使得用户可以方便地查看和管理 ES 集群的状态,包括节点信息、索引详情、搜索、监控等各项功能。...
Elasticsearch查询客户端是用于与ES服务器通信的软件,它们提供了多种语言的API,允许开发者以编程方式执行索引、搜索、更新和删除等操作。常见的Elasticsearch客户端包括: - **Jest**:一个轻量级的Java REST...
**Elasticsearch插件Delete-by-Query详解** 在Elasticsearch中,删除操作通常是针对单个文档进行的,但有时我们需要删除满足特定条件的一大批文档。这时,`Delete-by-Query`插件就显得尤为重要。它允许我们通过一个...
BoolQuery是Elasticsearch中的一种查询方式,使用must、should、must_not三个关键词来实现查询。must表示文档必须完全匹配条件,should表示文档至少满足一个条件,must_not表示文档必须不匹配条件。 在查询时,...
一.Es的配置 实现es的全文检索功能的第一步,首先从与es进行连接开始,这里我使用的是es的5.x java api语法. public TransportClient esClient() throws UnknownHostException{ Settings settings = Settings....
elasticsearch的客户端比较出名的就是elasticsearch head 和Kibana了, 但是elasticsearch head已经停止更新,且样式老旧,功能不全; 而Kibana虽功能全面,但是启动麻烦,大部分功能用不上,很不灵活,所以采用vite...
在本项目中,“对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询”,主要涉及到的知识点有: 1. **Elasticsearch查询语句**:Elasticsearch支持丰富的查询语法,如match查询、term查询、range查询...
详细介绍了ElasticSearch的查询语言(Domain Specific Language),包括全量查询(Match All Query)、全文查询(Full Text Queries)、词项级查询(Term level queries)、复合查询(Compound queries)、连接查询...
Elasticsearch数据库详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Elasticsearch数据库详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Elasticsearch数据库详解(文档...
es-wp-query, 在替换WP_Query以利用Elasticsearch进行复杂查询时, 用于的Elasticsearch封装替代WP_Query的替代,以利用Elasticsearch进行复杂查询。警告警告 !这个插件目前处于beta开发阶段,因此,它的任何部分都...
Elasticsearch QueryBuilder简单查询实现解析 Elasticsearch QueryBuilder是一个强大的查询构建器,它提供了多种查询方式来实现对数据的查询。下面我们将通过示例代码,详细介绍Elasticsearch QueryBuilder简单查询...
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
**Elasticsearch 8.x 向量搜索使用详解** Elasticsearch 8.x 版本引入了对向量搜索的支持,这使得它能够处理非结构化的数据,如图像、文本和语音的语义搜索。向量搜索是通过将数据转换为高维向量并进行相似度比较来...
### ElasticSearch 查询语句详解 #### 一、概述 ElasticSearch 是一款基于 Lucene 的分布式搜索和分析引擎,适用于全文检索、结构化检索及分析等场景。它提供了丰富的 API 接口,允许用户通过简单的 RESTful 方式...
查询DSL-复合查询 Elasticsearch 7.6 中的查询DSL(Domain Specific Language)是一种强大的查询语言,允许用户构建复杂的查询逻辑。查询DSL由多种查询类型组成,每种查询类型都有其特定的用途和应用场景。 查询上...
`[elastic-query]`是Elasticsearch的查询语句,如`GET /index/_search`;`| other-unix-tools`则表示将es2unix的输出传递给其他Unix工具处理。 例如,如果你想查询名为`logs`索引的前10条记录,可以使用以下命令: ...
4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...
【Elasticsearch查询API】是Elasticsearch中用于检索数据的核心功能,允许用户通过各种查询语句和过滤条件从索引中获取相关文档。本文将详细介绍Elasticsearch接口API的使用,特别是全文检索、查询匹配以及常用的...
Elasticsearch 7.12.1 是一个强大的开源全文搜索引擎,它基于 Lucene 库进行构建,提供了分布式、实时的搜索和分析引擎服务。这个版本的 Elasticsearch 针对性能和稳定性进行了优化,适用于大规模数据检索和分析场景...