1. maven配置2. 等值查询3. 范围查询4. 模糊查询5. 多条件查询6. 集合查询7. 使用should查询8. should和must配合查询9. 有值查询10. 分页查询

使用ES开发过程中多使用ES的javaAPI,通过javaAPI来对ES的索引进行操作,对ES的操作一般都是通过构建QueryBuilder对象来进行操作。下面介绍几种QueryBuilder的构建。

1. maven配置

maven依赖

   org.elasticsearch   elasticsearch   6.3.2   org.elasticsearch.client   transport   6.3.2

2. 等值查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.termQuery("name", "小李"));

查询name=小李的ES文档,等同于命令:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "must": [{        "term": {          "name": {            "boost": 1.0,            "value": "小李"          }        }      }],      "boost": 1.0    }  }}

3. 范围查询

BoolQueryBuilder queryBuilder = QueryBuilders.rangeQuery("age")                                .gte(18)                                .lte(50);

查询年龄大于等于18,并且小于等于50的记录,等同于以下命令。

{  "query": {    "range": {      "age": {        "include_lower": true,        "include_upper": true,        "from": 18,        "boost": 1.0,        "to": 50      }    }  }}

4. 模糊查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.wildcardQuery("name", "*小李*"));

查询姓名中包含有 小李 的的文档记录,等同于以下命令:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "must": [{        "wildcard": {          "name": {            "boost": 1.0,            "wildcard": "*小李*"          }        }      }],      "boost": 1.0    }  }}

5. 多条件查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.termQuery("name", "小李"))                .must(QueryBuilders.rangeQuery("age")                        .gte(10)                        .lte(50));

查询姓名为:小李,并且年龄在10-50之间的文档,等同于以下命令:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "must": [{        "term": {          "name": {            "boost": 1.0,            "value": "小李"          }        }      }, {        "range": {          "age": {            "include_lower": true,            "include_upper": true,            "from": 10,            "boost": 1.0,            "to": 50          }        }      }],      "boost": 1.0    }  }}

6. 集合查询

List<String> list = Arrays.asList("北京", "上海", "杭州");BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.termQuery("name", "李明"))                .must(QueryBuilders.termsQuery("address", list))                .must(QueryBuilders.rangeQuery("age")                        .gte(10)                        .lte(50));

查询地址在北京、上海、杭州,并且年龄在10至50,名字叫做李明的文档,等同于以下命令:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "must": [{        "term": {          "name": {            "boost": 1.0,            "value": "李明"          }        }      }, {        "terms": {          "address": ["北京", "上海", "杭州"],          "boost": 1.0        }      }, {        "range": {          "age": {            "include_lower": true,            "include_upper": true,            "from": 10,            "boost": 1.0,            "to": 50          }        }      }],      "boost": 1.0    }  }}

7. 使用should查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .should(QueryBuilders.wildcardQuery("name", "*小李*"))                .should(QueryBuilders.termQuery("address", "北京"));

查询姓名包含小李或者是地址是北京的记录,should相当于或者or,命令如下:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "should": [{        "wildcard": {          "name": {            "boost": 1.0,            "wildcard": "*小李*"          }        }      }, {        "term": {          "address": {            "boost": 1.0,            "value": "北京"          }        }      }],      "boost": 1.0    }  }}

8. should和must配合查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.termQuery("sex", "男"))                .should(QueryBuilders.wildcardQuery("name", "*小李*"))                .should(QueryBuilders.termQuery("address", "北京"))                .minimumShouldMatch(1);

查询性别为男,姓名包含小李或地址为北京的记录, minimumShouldMatch(1) 表示最少要匹配到一个should条件。相当于以下命令:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "should": [{        "wildcard": {          "name": {            "boost": 1.0,            "wildcard": "*小李*"          }        }      }, {        "term": {          "address": {            "boost": 1.0,            "value": "北京"          }        }      }],      "minimum_should_match": "1",      "must": [{        "term": {          "sex": {            "boost": 1.0,            "value": "男"          }        }      }],      "boost": 1.0    }  }}

must:必须满足的条件

should:非必须满足的条件

minimumShouldMatch(1):至少要满足一个 should 条件

以上queryBuilder可以理解为需要满足一个must条件,并且至少要满足一个should条件。

9. 有值查询

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()                .must(QueryBuilders.existsQuery("name"))                .mustNot(QueryBuilders.existsQuery("tag"));

查询name有值,tag不存在值的文档,命令如下:

{  "query": {    "bool": {      "adjust_pure_negative": true,      "must_not": [{        "exists": {          "field": "tag",          "boost": 1.0        }      }],      "must": [{        "exists": {          "field": "name",          "boost": 1.0        }      }],      "boost": 1.0    }  }}

10. 分页查询

SearchResponse response = this.transportClient.prepareSearch(index)                .setTypes(type)                .setQuery(queryBuilder)                .setFrom(offset)                .setSize(rows)                .setExplain(false)                .execute()                .actionGet();

普通分页查询数据,相当于以下命令:

{  "from" : 0,  "size" : 10,  "query": {    "bool": {      "adjust_pure_negative": true,      "must": [{        "term": {          "name": {            "boost": 1.0,            "value": "小李"          }        }      }],      "boost": 1.0    }  }}

基于scrollId查询的API如下:

SearchResponse scrollResp = null;        String scrollId = ContextParameterHolder.get("scrollId");        if (scrollId != null) {            scrollResp = getTransportClient().prepareSearchScroll(scrollId).setScroll(new TimeValue(60000)).execute()                    .actionGet();        } else {            log.info("基于scroll的分页查询,scrollId为空");            scrollResp = this.prepareSearch()                    .setSearchType(SearchType.QUERY_AND_FETCH)                    .setScroll(new TimeValue(60000))                    .setQuery(queryBuilder)                    .setSize(page.getPageSize()).execute().actionGet();            ContextParameterHolder.set("scrollId", scrollResp.getScrollId());        }
文章目录1. maven配置2. 等值 查询 3. 范围 查询 4. 模糊 查询 5. 多 条件 查询 6. 集合 查询 7. 使用should 查询 8. should和must配合 查询 9. 有值 查询 10. 分页 查询 开发过程中多使用 ES 的javaAPI,通过javaAPI来对 ES 的索引进行操作,对 ES 的操作一般都是通过 构建 Query Builder 对象来进行操作。下面介绍几种 Query Builder 构建 。 1. maven配置 maven依赖 <dependency> <groupId>org. // 所需要的jar包 import org.elastic search .action.bulk.BulkRequ es t Builder ; import org.elastic search .action.delete.DeleteR es ponse; import org.elastic search .action.index.IndexRequ es t; import java.net.InetSocketAddr es s; import java.util.ArrayList; import java.util.Iterator; import java.util.Map.Entry; import org.elastic search .action.ListenableActionFuture;. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结构化 查询 语言(Structured Query Language)简称SQL(发音:/ˈ es kjuː ˈel/ “S-Q-L”),是一种特殊目的的编程语言,是一种数据库 查询 和程序设计语言,用于存取数据以及 查询 、更新和管理关... 满意答案a88113376推荐于 2019.10.02采纳率:48%等级:8已帮助:412人ACC ES S里 "Group By”与"Count" 是两个不同的东西。前者是SQL 查询 语言里的“分组子句”,它可以对记录进行分组,用于提取每个组中一条与该组汇总有关的信息。后者是SQL 查询 语言里的聚合函数之一,它可以对记录进行计数,返回记录的条数。"Group By”子句通常要与聚合函数配合使用借... 不少人都知道使用电子表格(excel)进行分数段统计,使用acc es s的人也可以用它设计 查询 进行分数段人数统计。这里假设你有一个acc es s表(也可以是基表的 查询 ),名叫tblScore(当然可以是中文名称,只不过代码内也要作相应修改),表内是一定数量的学生的各科成绩--班级 姓名 总分 语文 数学1班 a 601 108 1202班 b 589 112... 雾航中,假设建立级等计出计视计行级机动船甲听到左前方一长二短雾号,接着又听到一长三短,在看到他船之前( )。用一初等矩阵左乘一矩阵B,中中包字段查总计择等于对B施行相应的列变换。设A为n级方阵:已经要统应分|A|=2,则|-A|=(-1)n2对任意矩阵A,生表数A′A是对称矩阵。表别班班级别选单片机的复位引脚是( )。执行加法指令后,括学如果最高位产生了进位,则CY为( )。号姓和班单片机汇编语言... 1、什么是 Requ es t cache: Requ es t Cache,全称是 Shard Requ es t Cache,即分片级请求缓存。当对一个或多个索引发送搜索请求时,搜索请求首先会发送到 ES 集... 用Acc es s统计新生数据【摘要】本文通过用Acc es s统计新生报到的各类数据实例,介绍了Acc es s中的 查询 及交叉表 查询 等功能的应用,期望读者在应用中挖掘它的功能,提高工作效率。【关键词】Acc es s应用;新生录取及报到数据各类统计在多年的招生工作中,深刻体会到新生录取及报到的各类统计对高职院校的专业设置及宣传战略都起到了非常重要的指导意义,故笔者以应用Acc es s进行对高职院校新生的各类统计为...