ElasticSearch 组合查询(must not_must should filter)

ElasticSearch Demo:

package org.ssgroup;import java.io.IOException;
import java.net.InetAddress;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;public class ElasticSearchMultiQuery {private static String ES_HOST1 = "192.168.10.252";private static String ES_HOST2 = "192.168.10.254";private static String ES_HOST3 = "192.168.10.255";private static int ES_PORT = 9300;/*** 实际开发中,基本都是组合多条件查询* elasticsearch提供Boolean来实现这种需求* 主要参数:*   must:文档必须匹配这些条件才能被包含进来。*  must_not:文档必须不匹配这些条件才能被包含就来。*  should:如果满足这些语句中的任意语句,将增加_score,否则无任何影响,*    主要用于修正每个文档的相关性得分。*  filter:必须匹配,但他以不评分、过滤模式来进行,这些语句对评分没有贡献,*   只是根据过滤标准来排除或包含文档。* @param args* @throws IOException*/public static void main(String[] args) throws IOException {Settings settings = Settings.builder().put("cluster.name", "my-application").build();TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName(ES_HOST1), ES_PORT)).addTransportAddress(new TransportAddress(InetAddress.getByName(ES_HOST2), ES_PORT)).addTransportAddress(new TransportAddress(InetAddress.getByName(ES_HOST3), ES_PORT));//多条件查询(即包含... 并且包含...) must and must//multiSearchMust(client);//多条件查询(即包含... 并且不包含...) must and must_not//multiSearchMustNot(client);//多条件查询(加权显示)//multiSearchShould(client);//多条件查询(过滤)multiSearchFilter(client);client.close();}/*** 多条件查询(即包含、并且包含)* @param client*/public static void multiSearchMust(TransportClient client) {SearchResponse response = client.prepareSearch("film").setTypes("dongzuo").setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("title", "战")).must(QueryBuilders.matchPhraseQuery("content", "星球"))).execute().actionGet();SearchHits searchHits = response.getHits();for(SearchHit searchHit : searchHits.getHits()) {System.out.println(searchHit.getSourceAsString());}}/*** 多条件查询(即包含、并且不包含)* @param client*/public static void multiSearchMustNot(TransportClient client) {SearchResponse response = client.prepareSearch("film").setTypes("dongzuo").setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("title", "战")).mustNot(QueryBuilders.matchPhraseQuery("content", "武士"))).execute().actionGet();SearchHits searchHits = response.getHits();for(SearchHit searchHit : searchHits.getHits()) {System.out.println(searchHit.getSourceAsString());}}/*** 多条件查询(加权显示)* @param client*/public static void multiSearchShould(TransportClient client) {SearchResponse response = client.prepareSearch("film").setTypes("dongzuo").setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("title", "战")).should(QueryBuilders.matchPhraseQuery("content", "星球")).should(QueryBuilders.rangeQuery("publishDate").gte("2018-01-01"))).execute().actionGet();SearchHits searchHits = response.getHits();for(SearchHit searchHit : searchHits.getHits()) {System.out.println("搜索得分:"+searchHit.getScore());System.out.println(searchHit.getSourceAsString());}}/*** 多条件查询(过滤)* @param client*/public static void multiSearchFilter(TransportClient client) {SearchResponse response = client.prepareSearch("film").setTypes("dongzuo").setQuery(QueryBuilders.boolQuery().must(QueryBuilders.matchPhraseQuery("title", "战")).filter(QueryBuilders.rangeQuery("price").lte("40"))).execute().actionGet();SearchHits searchHits = response.getHits();for(SearchHit searchHit : searchHits.getHits()) {System.out.println(searchHit.getSourceAsString());}}
}

ElasticSearch 组合查询(must not_must should filter)相关推荐

  1. SpringBoot Elasticsearch组合查询封装

    最近项目组需要用到Elasticsearch,封装了ESQueryBuilder方便条件组合,结合ES工具类使用效果更佳,下面是ES工具类传送门: SpringBoot Elasticsearch工具 ...

  2. elasticsearch组合查询

    1.bool查询 must,should,must_not这几个参看博主另一篇博文有讲解: https://blog.csdn.net/u013294097/article/details/10055 ...

  3. 01.query的分类-条件查询和组合查询

    文章目录 1. es单个条件查询和组合查询 2.query和filter context 1. query context 2. filter context 3.使用样例 1. es单个条件查询和组 ...

  4. elasticsearch 建立索引、增删改查 及简单查询和组合查询的学习笔记

    创建一个索引(数据库) PUT lagou # 索引名称 {"settings": {"index":{"number_of_shards" ...

  5. Elasticsearch 4: 相关性检索和组合查询

    目录 1. 相关性评分 2. 相关度模型 2.1 布尔模型 2.2 向量空间模型 2.3 概率模型 2.4 语言模型 3. TF/IDF 4. BM25 4.1 词频饱和度 4.2 长度归一化 5. ...

  6. ES基本查询,filter 查询,组合查询

    Elasticsearch 是功能强大的全文搜索引擎,用它的目的就是为了能快速的查询你想好要的数据 基本查询:利用Elasticsearch内置查询条件进行查询 组合查询:把多个基本查询组合在一起的复 ...

  7. Elasticsearch使用篇 - 组合查询

    Bool Query - 布尔组合查询 把其它查询布尔组合在一起. 使用 must.should.must_not.filter 选项表示其它查询之间的布尔关系.每个选项都可以出现任意次. 从结构上, ...

  8. elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  9. ElasticSearch实现高亮、范围查询和多条件组合查询(java和kibana)

    ElasticSearch客户端配置参考之前的博客 1.高亮 高亮的本质其实是将搜索结果中需要高亮的字段进行替换 public List<Map<String,Object>> ...

最新文章

  1. 【Docker】容器的几种网络模式
  2. python中将嵌套列表展开
  3. 【自用】 TensorFlow merge_all_summaries SummaryWriter 报错问题
  4. mysql表打包到程序中_C#/winform程序打包布署 如何把SQL 数据库 一起打包进去?
  5. python 窗口程序开发课程_从零开始学Python - 第019课:使用PyCharm开发Python应用程序...
  6. 国家开放大学计算机应用模块3客观题答案,国家开放大学《计算机应用基础》考试与答案形考任务模块3模块3Excel2010电子表格系统—客观题答案.pdf...
  7. Map定义了几个用于插入和删除元素的变换方法
  8. uni.startPullDownRefresh 只能执行一次的解决方案
  9. 神经网络测试样本的选择,如何测试神经网络模型
  10. mysql查询各类课程的总学分_关于SQL练习2的一些写法。。。查询选修人数超过2人且成绩都在60分以上的课程 查询选修张老师讲授所有课程的学生 计算并填写学生获得的总学分...
  11. Gin:路由抽离与分组
  12. 完美解决iPhone自带的邮箱连接outlook后无法发送邮件问题
  13. 模拟cmos集成电路(4)
  14. JS之数据结构与算法
  15. vue使用element-ui开发的后台管理系统使用中英文切换多语言国际化方案步骤流程
  16. linux 部署Nginx
  17. webclient学习1.webclient是什么?
  18. 堪称最佳邮箱Gmail邮箱的神奇的一号多名功能
  19. [COCI2014-2015#7] TETA
  20. JAVA毕业设计计算机实验中心网站计算机源码+lw文档+系统+调试部署+数据库

热门文章

  1. 能复活超级英雄的除了时间宝石,还有量子计算机?
  2. 条码标签设计软件Nicelabel使用方法
  3. 谷歌大数据的三驾马车
  4. 前后端分离状态保持问题之JWT
  5. 高德地图JavaScript根据后台坐标点绘制轨迹
  6. Android平台证件识别系统
  7. 笔试题——用java实现股票交易日的判断
  8. 会计学测试(所得税、未分配利润)
  9. 函数的参数作为引用时
  10. TCP协议中的三次握手和四次挥手(图…