`

Elasticsearch Compound Query 复合查询详解

阅读更多
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插件

    ES Head 插件是针对 Elasticsearch (简称 ES) 的一个非常实用的管理工具,它提供了一个基于网页的用户界面,使得用户可以方便地查看和管理 ES 集群的状态,包括节点信息、索引详情、搜索、监控等各项功能。...

    ES查询客户端,elasticsearch可视化工具 elasticsearch查询客户端

    Elasticsearch查询客户端是用于与ES服务器通信的软件,它们提供了多种语言的API,允许开发者以编程方式执行索引、搜索、更新和删除等操作。常见的Elasticsearch客户端包括: - **Jest**:一个轻量级的Java REST...

    elasticsearch插件delete-by-query

    **Elasticsearch插件Delete-by-Query详解** 在Elasticsearch中,删除操作通常是针对单个文档进行的,但有时我们需要删除满足特定条件的一大批文档。这时,`Delete-by-Query`插件就显得尤为重要。它允许我们通过一个...

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

    BoolQuery是Elasticsearch中的一种查询方式,使用must、should、must_not三个关键词来实现查询。must表示文档必须完全匹配条件,should表示文档至少满足一个条件,must_not表示文档必须不匹配条件。 在查询时,...

    Elasticsearch实现复合查询高亮结果功能

    一.Es的配置 实现es的全文检索功能的第一步,首先从与es进行连接开始,这里我使用的是es的5.x java api语法. public TransportClient esClient() throws UnknownHostException{ Settings settings = Settings....

    ES查询客户端,elasticsearch可视化工具

    elasticsearch的客户端比较出名的就是elasticsearch head 和Kibana了, 但是elasticsearch head已经停止更新,且样式老旧,功能不全; 而Kibana虽功能全面,但是启动麻烦,大部分功能用不上,很不灵活,所以采用vite...

    对ElasticsearchPHP进行查询语句封装可实现链式调用方便es查询

    在本项目中,“对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询”,主要涉及到的知识点有: 1. **Elasticsearch查询语句**:Elasticsearch支持丰富的查询语法,如match查询、term查询、range查询...

    ElasticSearch Java API 中文文档

    详细介绍了ElasticSearch的查询语言(Domain Specific Language),包括全量查询(Match All Query)、全文查询(Full Text Queries)、词项级查询(Term level queries)、复合查询(Compound queries)、连接查询...

    Elasticsearch数据库详解

    Elasticsearch数据库详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Elasticsearch数据库详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Elasticsearch数据库详解(文档...

    es-wp-query, 在替换WP_Query以利用Elasticsearch进行复杂查询时,.zip

    es-wp-query, 在替换WP_Query以利用Elasticsearch进行复杂查询时, 用于的Elasticsearch封装替代WP_Query的替代,以利用Elasticsearch进行复杂查询。警告警告 !这个插件目前处于beta开发阶段,因此,它的任何部分都...

    Elasticsearch QueryBuilder简单查询实现解析

    Elasticsearch QueryBuilder简单查询实现解析 Elasticsearch QueryBuilder是一个强大的查询构建器,它提供了多种查询方式来实现对数据的查询。下面我们将通过示例代码,详细介绍Elasticsearch QueryBuilder简单查询...

    springboot整合elasticsearch7实现es数据同步,查询、相关度排序、高亮显示、自动补全搜索等功能。

    springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。

    02-Elasticsearch 8.x 向量搜索使用详解 杭州 1.6 2024

    **Elasticsearch 8.x 向量搜索使用详解** Elasticsearch 8.x 版本引入了对向量搜索的支持,这使得它能够处理非结构化的数据,如图像、文本和语音的语义搜索。向量搜索是通过将数据转换为高维向量并进行相似度比较来...

    ElasticSearch查询语句

    ### ElasticSearch 查询语句详解 #### 一、概述 ElasticSearch 是一款基于 Lucene 的分布式搜索和分析引擎,适用于全文检索、结构化检索及分析等场景。它提供了丰富的 API 接口,允许用户通过简单的 RESTful 方式...

    查询DSL-复合查询.docx

    查询DSL-复合查询 Elasticsearch 7.6 中的查询DSL(Domain Specific Language)是一种强大的查询语言,允许用户构建复杂的查询逻辑。查询DSL由多种查询类型组成,每种查询类型都有其特定的用途和应用场景。 查询上...

    linux命令行elasticsearch查询工具es2unix

    `[elastic-query]`是Elasticsearch的查询语句,如`GET /index/_search`;`| other-unix-tools`则表示将es2unix的输出传递给其他Unix工具处理。 例如,如果你想查询名为`logs`索引的前10条记录,可以使用以下命令: ...

    ElasticSearch正向匹配、反向匹配,空间查询等示例(java代码).rar

    4.(后端技术篇java)ElasticSearch实现反向地址匹配服务(点周边查询服务) 5.(后端技术篇java)ElasticSearch实现矩形空间查询服务 6.(后端技术篇java)ElasticSearch实现圆形空间查询服务 7.(后端技术篇java)...

    Elasticsearch查询API

    【Elasticsearch查询API】是Elasticsearch中用于检索数据的核心功能,允许用户通过各种查询语句和过滤条件从索引中获取相关文档。本文将详细介绍Elasticsearch接口API的使用,特别是全文检索、查询匹配以及常用的...

    适用于elasticsearch7.12.1版本

    Elasticsearch 7.12.1 是一个强大的开源全文搜索引擎,它基于 Lucene 库进行构建,提供了分布式、实时的搜索和分析引擎服务。这个版本的 Elasticsearch 针对性能和稳定性进行了优化,适用于大规模数据检索和分析场景...

Global site tag (gtag.js) - Google Analytics