ElasticSearch 范围查询
就是 在网页里 搜索像 价格范围 在 2000-3000元内的商品,或 搜索房子面积 在 100 - 150平方的 这些功能。
用来进行:范围查询``的关键字 range
# 范围查询
GET goods/_search
{
"query": {
"range": {
"price": {
"gte": 2000,
"lte": 3000
}
}
},
# 排序查询
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
/* :范围查询 rangeQuery
* 排序查询 */
@Test
public void testRangeQuery() throws IOException {
SearchRequest searchRequest = new SearchRequest("goods");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 范围查询
RangeQueryBuilder query = QueryBuilders.rangeQuery("price");
// 设置查询范围的下限
query.gte(2000);
// 设置查询范围的上线
query.lte(3000);
sourceBuilder.query(query);
// 对查询结果排序
sourceBuilder.sort("pice", SortOrder.DESC);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits searchHits = searchResponse.getHits();
// 获取记录数
long value = searchHits.getTotalHits().value;
System.out.println("总记录数:"+value);
List<Goods> goodsList = new ArrayList<>();
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
String sourceAsString = hit.getSourceAsString();
// 转为Java
Goods goods = JSON.parseObject(sourceAsString, Goods.class);
goodsList.add(goods);
}
for (Goods goods : goodsList) {
System.out.println(goods);
} }