为了账号安全,请及时绑定邮箱和手机立即绑定

在java elasticsearch中获取价格范围在最小值和最大值之间的数据

在java elasticsearch中获取价格范围在最小值和最大值之间的数据

狐的传说 2021-06-21 09:25:11
我是弹性搜索的新手,到目前为止我正在阅读文档,它很好,但我无法编写按范围获取的方法,下面是一种按 ID 获取的方法,它运行良好,但我如何才能做到这一点以获得与价格范围匹配的数据列表。 public Map<String, Object> getTourById(String id){        GetRequest getRequest = new GetRequest(INDEXTOUR, TYPETOUR, id);        GetResponse getResponse = null;        try {            getResponse = restHighLevelClient.get(getRequest);        } catch (java.io.IOException e){            e.printStackTrace();            e.getLocalizedMessage();        }        Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();        return sourceAsMap;    }上面的方法现在工作正常下面是按范围获取并返回与价格匹配的数据的方法 public Map<String, Object> getTourByPriceRange(int minPrice, int maxPrice) {        GetRequest getRequest = new GetRequest(INDEXTOUR, TYPETOUR, "requires an ID");        QueryBuilder qb = QueryBuilders                .rangeQuery("price")                .from(minPrice)                .to(maxPrice)                .includeLower(true)                .includeUpper(true);        GetResponse getResponse = null;        try {            getResponse = restHighLevelClient.get(getRequest);        } catch (java.io.IOException e) {            e.printStackTrace();            e.getLocalizedMessage();        }        Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();        return sourceAsMap;    }在上述方法中,只有查询构建器是准确的,我想得到的结果是一组价格落在给定范围内的数据。{    "departure": {      "city": "\u0438\u043d\u0441\u043a",      "date": "2018-08-10"    },    "extras": [],    "hotel": {      "beach": {        "distance": 0,        "type": "\u041f\u0435\u0447\u0430\u043d\u044b\u0439"      },      "country": "\u0413\u0440\u0446\u0438\u044f",      "distanceToAirport": 0,      "facilities": [        "Standard Without Balcony"      ],
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

到目前为止做得很好!!为了发出搜索请求,您需要使用SearchRequest而不是GetRequest通过 ID 检索单个文档。


QueryBuilder qb = QueryBuilders

            .rangeQuery("price")

            .from(minPrice)

            .to(maxPrice)

            .includeLower(true)

            .includeUpper(true);


    SearchRequest searchRequest = new SearchRequest(INDEXTOUR); 

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 

    searchSourceBuilder.query(qb); 

    searchRequest.types(TYPETOUR);

    searchRequest.source(searchSourceBuilder); 


    SearchResponse searchResponse = null;

    try {

        searchResponse = restHighLevelClient.search(searchRequest);

    } catch (java.io.IOException e) {

        e.printStackTrace();

        e.getLocalizedMessage();

    }


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 348 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号