算分函数查询

  1. @SpringBootTest
  2. public class MyTest{
  3. //注入RestHighLevelClient对象
  4. @Autowired
  5. private RestHighLevelClient restHighLevelClient;
  6. @Test
  7. public void test() throws IOException {
  8. //准备SearchRequest请求对象,并指定索引库名
  9. SearchRequest searchRequest = new SearchRequest(索引库名);
  10. //准备BoolQueryBuilder查询对象
  11. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  12. //在BoolQueryBuilder查询对象中添加TermQueryBuilder查询对象,must表示必须匹配且参与算分
  13. boolQueryBuilder.must(QueryBuilders.termQuery(字段名, 搜索词));
  14. //在BoolQueryBuilder查询对象中添加RangeQueryBuilder查询对象,filter表示必须匹配且不参与算分
  15. boolQueryBuilder.filter(QueryBuilders.rangeQuery(字段名).gte(大于等于的值).lte(小于等于的值));
  16. //准备FunctionScoreQueryBuilder查询对象,并在其中添加BoolQueryBuilder查询对象
  17. FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(
  18. //原始查询,相关性算分的查询
  19. boolQueryBuilder,
  20. //算分函数数组
  21. new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
  22. //创建算分函数对象并将其放入数组中
  23. new FunctionScoreQueryBuilder.FilterFunctionBuilder(
  24. //指定满足算分函数的过滤条件
  25. QueryBuilders.termQuery(字段名, 搜索词),
  26. //指定算分函数和值
  27. ScoreFunctionBuilders.算分函数(值)
  28. )
  29. });
  30. //在SearchRequest请求对象中放入FunctionScoreQueryBuilder查询对象
  31. searchRequest.source().query(functionScoreQueryBuilder);
  32. //发送请求,得到响应对象
  33. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  34. //从响应对象中获取响应结果
  35. SearchHits searchHits = searchResponse.getHits();
  36. //获取文档的总条数
  37. long total = searchHits.getTotalHits().value;
  38. //获取搜索结果数组
  39. SearchHit[] hits = searchHits.getHits();
  40. //创建文档集合,用于存放结果
  41. List<文档类名> 集合对象名 = new ArrayList<>();
  42. //遍历数组
  43. for (SearchHit hit : hits) {
  44. //获取Json格式的文档内容
  45. String json = hit.getSourceAsString();
  46. //反序列化Json,这里需要引入fastjson的依赖
  47. 文档类名 文档对象名 = JSON.parseObject(json, 文档类名.class);
  48. //将结果放入集合
  49. 集合对象名.add(文档对象名);
  50. }
  51. }
  52. }

布尔查询

  1. @SpringBootTest
  2. public class MyTest{
  3. //注入RestHighLevelClient对象
  4. @Autowired
  5. private RestHighLevelClient restHighLevelClient;
  6. @Test
  7. public void test() throws IOException {
  8. //准备SearchRequest请求对象,并指定索引库名
  9. SearchRequest searchRequest = new SearchRequest(索引库名);
  10. //准备BoolQueryBuilder查询对象
  11. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  12. //在BoolQueryBuilder查询对象中添加TermQueryBuilder查询对象,must表示必须匹配且参与算分
  13. boolQueryBuilder.must(QueryBuilders.termQuery(字段名, 搜索词));
  14. //在BoolQueryBuilder查询对象中添加RangeQueryBuilder查询对象,filter表示必须匹配且不参与算分
  15. boolQueryBuilder.filter(QueryBuilders.rangeQuery(字段名).gte(大于等于的值).lte(小于等于的值));
  16. //在SearchRequest请求对象中放入BoolQueryBuilder查询对象
  17. searchRequest.source().query(boolQueryBuilder);
  18. //发送请求,得到响应对象
  19. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  20. //从响应对象中获取响应结果
  21. SearchHits searchHits = searchResponse.getHits();
  22. //获取文档的总条数
  23. long total = searchHits.getTotalHits().value;
  24. //获取搜索结果数组
  25. SearchHit[] hits = searchHits.getHits();
  26. //创建文档集合,用于存放结果
  27. List<文档类名> 集合对象名 = new ArrayList<>();
  28. //遍历数组
  29. for (SearchHit hit : hits) {
  30. //获取Json格式的文档内容
  31. String json = hit.getSourceAsString();
  32. //反序列化Json,这里需要引入fastjson的依赖
  33. 文档类名 文档对象名 = JSON.parseObject(json, 文档类名.class);
  34. //将结果放入集合
  35. 集合对象名.add(文档对象名);
  36. }
  37. }
  38. }