您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 2浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ES--Query and filter context

宝哥大数据 发布时间:2021-03-31 16:53:50 ,浏览量:2

参考官网 Elasticsearch Reference [7.10] » Query DSL » Query and filter context

文章目录
    • 1.1、query与filter区别
    • 1.2、实例: 依据smsContent字段包含魅力的以及fee消费小于400的filter查询公司的短信内容
      • 1.2.1、RESTful 代码
      • 1.2.2、java 代码

1.1、query与filter区别

query,根据你的查询条件,去计算文档的匹配得到一个分数_score,并且根据分数进行排序,不会做缓存; filter,根据你的查询条件去查询文档,不去计算分数,而且filter会对经常被过滤的数据进行缓存,方便下次快速定位查询;

如果你的查询比较精准,即不太在乎匹配数据的分数score,建议使用filter; 如果匹配条件不确定,需要依赖分数score来进行产讯结果的排序,则用query; 不依赖分数score的情况下,filter的性能优于query;

1.2、实例: 依据smsContent字段包含魅力的以及fee消费小于400的filter查询公司的短信内容 1.2.1、RESTful 代码
POST /sms-logs-index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "smsContent": "魅力"
          }
        },
        {
          "range": {
            "fee": { 
              "lte": 400
            }
          }
        }
      ]
    }
  }
}

在这里插入图片描述

1.2.2、java 代码
package com.chb.test;

import com.chb.utils.ESClient;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;

import java.io.IOException;

public class FilterDemo {
    RestHighLevelClient client = ESClient.getClient();
    String index = "sms-logs-index";

    @Test
    public void filterQuery() throws IOException {
        // 1、SearchRequest
        SearchRequest searchRequest = new SearchRequest(index);
        
        // 2、指定查询条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.filter(QueryBuilders.termQuery("smsContent", "魅力"));
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("fee").lte(400));

        searchSourceBuilder.query(boolQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        
        // 3、执行
        SearchResponse resp = client.search(searchRequest, RequestOptions.DEFAULT);
        
        // 4、打印
        for (SearchHit hit : resp.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }
}

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0435s