ElasticSearch(十二) Bool Query JAVA API

Bool Query 用于组合多个叶子或复合查询子句的默认查询

must 相当于 与 & =

must not 相当于 非 ~   !=

should 相当于 或  |   or 

filter  过滤

boolQuery()
        .must(termQuery("content", "test1"))               
        .must(termQuery("content", "test4"))                 
        .mustNot(termQuery("content", "test2"))              
        .should(termQuery("content", "test3"))               
        .filter(termQuery("content", "test5"));


private SearchRequest getSearchRequest(RequestType request) {

SearchRequest sr = new SearchRequest();

//指定索引名称,如未指定则会查询所有
sr.indices(ElasticSearchConst.XXX_INDEX);
sr.types(ElasticSearchConst.XXX_TYPE);

SearchSourceBuilder source = new SearchSourceBuilder();
BoolQueryBuilder bq = QueryBuilders.boolQuery();

getQueryBuilder(request, bq);

// from 从0开始,包含前后边界 实际是  <=  >=

source.from(request.getRowStart());
source.size(request.getRowSize());
source.query(bq);

setSort(request, source);
sr.source(source);
return sr;
}

 
 

private void getQueryBuilder(RequestType request, BoolQueryBuilder bq) {

getOrderQueryBuilder(request, bq);

       addPurchaseOrderQueryBuilder(request, bq);
}

 

/**
* 查询条件
*
* @param request
* @param bq
*/
private void getOrderQueryBuilder(RequestType request, BoolQueryBuilder bq) {

        // termQuery 精确匹配,不分词 相当于 等于 =

       //Type.childType 多层类型嵌套,具体索引结构,参考mapping   

      //  GET  yourindexname/_mapping

     Mapping:

{
  "yourindexname": {
    "mappings": {
      "type1": {
        "properties": {
          "childtype": {
            "properties": {
              "cedStatus": {
                "type": "text",
                "fields": {
                "keyword": {
                "type": "keyword",
                "ignore_above": 256
                      }
                    }
                },

  bq.must(QueryBuilders.termQuery("Type.childType", request.getOrderId()));
        //rangeQuery 范围查询,最大范围不超过1w

  bq.must(QueryBuilders.rangeQuery("Type.childType.departureDate")
    .gte(DateUtil.toSqlTimeStamp(request.getDepartureDateStart().getTime()).getTime())
    .lte(DateUtil.toSqlTimeStamp(request.getDepartureDateEnd().getTime()).getTime()));

//QueryBuilders.matchPhraseQuery  匹配查询,不分词,相当于 contains

//matchPhraseQuery 是直接以一个短语的形式查询,顺序无差,且连接在一起

pobq.must(QueryBuilders.matchPhraseQuery(
  String.format("%s%s%s", preFix, i, ".vacationVBKPurchaseOrderBaseInfoDto.contactName"),
  request.getContactName()));

 

转载于:https://www.cnblogs.com/xiaocandou/p/8127371.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值