我刚开始使用弹性搜索,目前我在阅读该文档,它很好,但我无法编写一个按范围获取的方法,下面是一个按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"
],
"food": "\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0432\u0442\u0440\u0430\u043a\u0438",
"photoUrl": "https://s1.tez-tour.com/hotel/7021893.jpg",
"regionName": "\u0425\u0430\u043b\u043a\u0438\u0434\u0438\u043a\u0438 - \u041a\u0430\u0441\u0441\u0430\u043d\u0434\u0440\u0430",
"stars": 4,
"title": "KALLIKRATEIA"
},
"nights": 8,
"people": 1,
"price": 2595 // i want to use price as parameters for the search method
}