猿问

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

我是弹性搜索的新手,到目前为止我正在阅读文档,它很好,但我无法编写按范围获取的方法,下面是一种按 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"

      ],



狐的传说
浏览 352回答 1
1回答

蓝山帝景

到目前为止做得很好!!为了发出搜索请求,您需要使用SearchRequest而不是GetRequest通过 ID 检索单个文档。QueryBuilder qb = QueryBuilders&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .rangeQuery("price")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .from(minPrice)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .to(maxPrice)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .includeLower(true)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .includeUpper(true);&nbsp; &nbsp; SearchRequest searchRequest = new SearchRequest(INDEXTOUR);&nbsp;&nbsp; &nbsp; SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();&nbsp;&nbsp; &nbsp; searchSourceBuilder.query(qb);&nbsp;&nbsp; &nbsp; searchRequest.types(TYPETOUR);&nbsp; &nbsp; searchRequest.source(searchSourceBuilder);&nbsp;&nbsp; &nbsp; SearchResponse searchResponse = null;&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; searchResponse = restHighLevelClient.search(searchRequest);&nbsp; &nbsp; } catch (java.io.IOException e) {&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; &nbsp; &nbsp; e.getLocalizedMessage();&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答