Elasticsearch:广告置顶

ゝ一纸荒年。 2024-03-24 10:48 194阅读 0赞
  1. import org.apache.http.HttpHost;
  2. import org.elasticsearch.client.RestClient;
  3. import org.elasticsearch.client.RestHighLevelClient;
  4. @Configuration
  5. public class ElasticsearchConfig {
  6. @Bean
  7. public RestHighLevelClient restHighLevelClient(){
  8. return new RestHighLevelClient(RestClient.builder(
  9. HttpHost.create("http://192.168.150.101:9200")
  10. ));
  11. }
  12. }
  13. @Data
  14. public class Demo {
  15. // ture表示有广告,则进行加分
  16. private Boolean isAD;
  17. }
  18. import com.alibaba.fastjson.JSON;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.elasticsearch.action.search.SearchRequest;
  22. import org.elasticsearch.action.search.SearchResponse;
  23. import org.elasticsearch.client.RestHighLevelClient;
  24. import org.elasticsearch.index.query.QueryBuilders;
  25. import org.elasticsearch.search.SearchHit;
  26. import org.elasticsearch.search.SearchHits;
  27. @Slf4j
  28. @Service
  29. public class DemoService extends ServiceImpl<DemoMapper, Demo> implements IDemoService {
  30. @Autowired
  31. private RestHighLevelClient restHighLevelClient;
  32. @Override
  33. public PageResult search(RequestParams params) {
  34. try {
  35. // 1.准备Request
  36. SearchRequest request = new SearchRequest("demo");
  37. // 2.准备请求参数
  38. // 2.1.分页
  39. int page = params.getPage();
  40. int size = params.getSize();
  41. request.source().from((page - 1) * size).size(size);
  42. // 2.2.算分函数查询
  43. FunctionScoreQueryBuilder functionScoreQuery = QueryBuilders.functionScoreQuery(
  44. boolQuery, // 原始查询,boolQuery
  45. new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{ // function数组
  46. new FunctionScoreQueryBuilder.FilterFunctionBuilder(
  47. QueryBuilders.termQuery("isAD", true), // 过滤条件
  48. ScoreFunctionBuilders.weightFactorFunction(10) // 算分函数
  49. )
  50. }
  51. );
  52. // 2.3.设置查询条件
  53. request.source().query(functionScoreQuery);
  54. // 3.发送请求
  55. SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
  56. // 4.解析响应
  57. return handleResponse(response);
  58. } catch (IOException e) {
  59. throw new RuntimeException("搜索数据失败", e);
  60. }
  61. }
  62. private PageResult handleResponse(SearchResponse response) {
  63. SearchHits searchHits = response.getHits();
  64. // 4.1.总条数
  65. long total = searchHits.getTotalHits().value;
  66. // 4.2.获取文档数组
  67. SearchHit[] hits = searchHits.getHits();
  68. // 4.3.遍历
  69. List<Demo> demoList = new ArrayList<>(hits.length);
  70. for (SearchHit hit : hits) {
  71. // 4.4.获取source
  72. String json = hit.getSourceAsString();
  73. // 4.5.反序列化,非高亮的
  74. Demo demo= JSON.parseObject(json, Demo.class);
  75. // 4.9.放入集合
  76. demoList.add(demo);
  77. }
  78. return new PageResult(total, hotels);
  79. }
  80. }

发表评论

表情:
评论列表 (有 0 条评论,194人围观)

还没有评论,来说两句吧...

相关阅读

    相关 博文

    欢迎来到我的博客 > 执灯把酒看见 归来仍是少年 简介 原产地:浙江衢州 生产日期:2004.10 生产编号:CYW 常用ID:Martian148