elasticSearch 动态查询

public static void main(String[] args) throws IOException {

        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));

//        insertRandom(client);

        esSearch(client);

    }

private static void esSearch(RestHighLevelClient client) throws IOException {
    String keyword = "衣";
    String minPrice = "1";
    String maxPrice = "10000";
    String category = "clothing";
    String sortStr = "price";
    String index = "0";

    esSearchResult(keyword, minPrice, maxPrice, category, sortStr, client, index);
}

private static void esSearchResult(String keyword, String minPrice, String maxPrice, String category, String sortStr, RestHighLevelClient client, String index) throws IOException {

    SearchRequest searchRequest = new SearchRequest("product");
    searchRequest.types("_doc");
    SearchSourceBuilder searchBuilder = new SearchSourceBuilder();

    BoolQueryBuilder bool = new BoolQueryBuilder();
    if (StringUtils.isNotBlank(keyword)) {
        MultiMatchQueryBuilder multiQuery = new MultiMatchQueryBuilder(keyword, "title", "description");
        bool.must(multiQuery);
    }
    if (StringUtils.isNotBlank(category)) {
        TermQueryBuilder termQueryBuilder = new TermQueryBuilder("category.keyword",category);//由于是字符串,必须keyword

        bool.must(termQueryBuilder);
    }
    if (StringUtils.isNotBlank(minPrice) || StringUtils.isNotBlank(maxPrice)) {
        RangeQueryBuilder priceBuild = new RangeQueryBuilder("price");
        if (StringUtils.isNotBlank(minPrice)) priceBuild.gte(Integer.parseInt(minPrice));
        if (StringUtils.isNotBlank(maxPrice)) priceBuild.lte(Integer.parseInt(maxPrice));
    }

    searchBuilder.query(bool);

    if (StringUtils.isNotBlank(sortStr)) {
        searchBuilder.sort(sortStr, SortOrder.DESC);
    }

    if (StringUtils.isNotBlank(index)) {
        searchBuilder.from(Integer.parseInt(index)).size(5);
    }

    searchRequest.source(searchBuilder);
    System.out.println(searchRequest.toString());

    SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);

    SearchHits hits = search.getHits();
    TotalHits totalHits = hits.getTotalHits();
    System.out.println("总数量 " + totalHits.value);

    SearchHit[] h = hits.getHits();

    System.out.println(" ID \t\t code \t\t price \t\t description \t\t\t\t category ");
    for (SearchHit d : h) {
        Map<String, Object> itemMap = d.getSourceAsMap();
        System.out.println(String.format(" %s \t\t %s \t\t %s \t\t %s \t\t %s \t\t\t\t %s  ",
                d.getId(),itemMap.get("title"),itemMap.get("code"),itemMap.get("price"),itemMap.get("description"),itemMap.get("category")));
    }

}

依赖

        <!-- low-level client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>8.2.2</version>
        </dependency>

数据
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值