★ElasticSearch07高级搜索--多字段查询--布尔查询--agg聚合查询--subagg子聚合

本文详细介绍了ElasticSearch的高级搜索技巧,包括多字段查询QueryString,通过restAPI和javaAPI实现布尔查询,以及agg聚合查询和subagg子聚合查询的使用方法,展示了如何查询手机均价。
摘要由CSDN通过智能技术生成

一。多字段查询QueryString

流程:

  • 会对查询条件进行分词。
  • 然后将分词后的查询条件和词条进行等值匹配
  • 默认取并集(OR)
  • 可以指定多个查询字段

1.1 restAPI

例:在title和brandName字段中只要有一个字段包含“小米手机”分词字样的话,都查出来:

GET goods/_search
{
   
  "query": {
   
    "query_string": {
   
      "fields": ["title","categoryName","brandName"],
      "query": "苹果手机"
    }
  }
}

例: title 和 brandName中都得包含“小米”或“手机”:

GET goods/_search
{
   
  "query": {
   
    "query_string": {
   
      "fields": ["title","brandName"],
      "query": "小米 AND 手机"
    }
  }
}

例 :title name字段中有一个字段包含 华为 或 手机 或 AND 三个分词就行,查询粒度大。
不支持连接符,按照“华为”“AND”“手机” 三个词查询:

GET goods/_search
{
   
  "query": {
   
    "simple_query_string": {
   
      "fields": ["title","categoryName","brandName"],
      "query": "华为 AND 手机"
    }
  }
}

1.2 javaAPI

@Test
    public void testStringQuery() throws IOException {
   
//        1.创建请求
        SearchRequest searchRequest = new SearchRequest("goods");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
       ★★★ QueryStringQueryBuilder field = QueryBuilders.queryStringQuery("小米 AND 手机").field("title").field("brandName");
        searchSourceBuilder.query(field);

        searchSourceBuilder.sort("price", SortOrder.DESC);

        searchRequest.source(searchSourceBuilder);
//        2.执行操作
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

//        3.获取结果
        List<Goods> goodsList = new ArrayList<>();
        SearchHits hits = searchResponse.getHits();
        long value = hits.getTotalHits().value;
        System.out.println(value);
        SearchHit[] smallHits = hits.getHits();
        for (SearchHit smallHit : smallHits) {
   
            String sourceAsString = smallHit.getSourceAsString();
            Goods goods = JSON.parseObject(sourceAsString, Goods.class);
            goodsList.add(goods);
        }
        for (Goods goods : goodsList) {
   
            System.out.println(goods);
        }

    }
SimpleQueryStringQueryBuilders.simpleQueryStringQuery("小米 AND 手机").field("title").field("brandName");

二。布尔查询

2.1 rest:

1概念:
多个查询条件连接

2链接方式:

  • must(and):条件必须成立
  • must_not(not):条件必须不成立
  • should(or):条件可以成立
  • filter:条件必须成立,性能比must高。负责上面三个条件查询结果的过滤。不会计算相关度score,因为耗性能。主要放: range 1000-2000,term 华为 。
# title必须包含手机,品牌必须小米,品牌可以是诺基亚,不能是华为,价格
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值