当前位置: 首页 > news >正文

solr8.0 springboot整合solr(四)

引言:

  solr搭建起后,就该应用到java后台开发里了,接下来就用springboot整合应用solr

 

一:引入jar包

  

<!--solr-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <!--操作solr的工具-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>8.0.0</version>
        </dependency>

 

二:对application配置文件进行配置(mycore1是我创建的核心,具体名字改为你所创建的核心)

spring:
  data:
    solr:
      host: http://127.0.0.1:8983/solr/mycore1

 

三:接下来就是代码操作了(详细解释看注解),这个只是我的服务层

@Service
public class SearchService {

    @Autowired
    private SolrClient solrClient;
//search就是搜索的内容,currentpage是因为我做了分页,如果没做分页可忽略此参数
    public PageResult searchNews(String search,int currentPage) throws IOException, SolrServerException {
//        创建solr查询对象
        SolrQuery query = new SolrQuery();
        if(null != search && !"".equals(search)){
//            设置查询关键词
            query.setQuery(search);
//            设置默认查询域
            query.set("df", "news_keywords");
        }
//        高亮显示
        query.setHighlight(true);
//        设置高亮显示字段
        query.addHighlightField("newsTitle,newsAbstract");
        query.setHighlightSimplePre("<span style='color:red'>");
        query.setHighlightSimplePost("</span>");
//        设置排序规则
        query.setSort("newsTime",SolrQuery.ORDER.desc);
//        设置返回格式
        query.set("wt","json");
//        设置分页
        query.set("start", (currentPage - 1) * 10);
        query.set("rows", 10);
//        进行查询得到返回结果
        QueryResponse queryResponse = solrClient.query(query);
//        取出高亮部分
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//        得到主体数据部分
        SolrDocumentList results = queryResponse.getResults();

        ArrayList<NewsWithBLOBs> newsList = new ArrayList<>();
//        对主体数据进行遍历,将数据依次保存到news对象中,然后将news对象加入list集合就是查询到的所有新闻
        for (SolrDocument result : results){
            NewsWithBLOBs news = new NewsWithBLOBs();
            news.setNewsId(result.get("id").toString());
            news.setNewsCover(result.get("newsCover").toString());
            news.setNewsTime((Date) result.get("newsTime"));
            news.setNewsBrowse((Integer) result.get("newsBrowse"));
            news.setNewsSchoolid(result.get("newsSchoolid").toString());
            news.setNewsCategoryid(result.get("newsCategoryid").toString());
            news.setNewsAbstract(result.get("newsAbstract").toString());
            news.setNewsContent(result.get("newsContent").toString());
//            设置高亮部分,下边是得到指定新闻id的高亮部分,并且将高亮部分设置进入对象中
            Map<String, List<String>> map = highlighting.get(result.get("id"));
            List<String> list = map.get("newsAbstract");
            if(null != list && list.size() > 0){
                String newsAbstract = list.get(0);
                news.setNewsAbstract(newsAbstract);
            }
            List<String> list1 = map.get("newsTitle");
            if(null != list1 && list1.size() > 0){
                String newsTitle = list1.get(0);
                news.setNewsTitle(newsTitle);
            }
            newsList.add(news);
         }

//        得到所获得的新闻条数
        long numFound = results.getNumFound();
//        下边是我自己的分页封装,可忽略,上边的到的newslist就是获得的所有新闻
        PageResult result = new PageResult();
        result.setRecordCount(numFound);
        System.out.println(numFound);
        result.setTotalPages((int) (numFound%10 == 0 ? numFound/10 : numFound/10+1));
        result.setList(newsList);
        return result;
    }
}

  

通过上边就能获取到指定的查询对象了,并且高亮显示也正常

转载于:https://www.cnblogs.com/ITDreamer/p/10740192.html

相关文章:

  • 18.C#--for循环的正序输出和倒序输出,在屏幕上打印1 - 10正序和倒序
  • 云计算的资源管理特性及服务类型
  • Manjaro 显示蓝牙耳机已连接但是没有声音
  • OMD图(对象模型图)的阅读
  • SQL server 数据库中dbo的含义
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 前端小白程序员入门之前知道这些,半年后都拿到8K+的offer
  • (四) 虚拟摄像头vivi体验
  • 链表(下)—— 6个技巧教你写出正确的链表代码
  • 一份阿里P7的面试题
  • svn统计代码行数(增量)
  • O2OA V4.1660 发布,Java 全功能开源办公软件
  • 比特币公共api大全
  • ansible从入门到放弃
  • LeetCode每日一题: 移除元素(No.27)
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【Amaple教程】5. 插件
  • Apache Spark Streaming 使用实例
  • input的行数自动增减
  • JavaScript 奇技淫巧
  • Javascript弹出层-初探
  • Linux链接文件
  • Mysql数据库的条件查询语句
  • React系列之 Redux 架构模式
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 聊聊directory traversal attack
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用SAX解析XML
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 正则学习笔记
  • 转载:[译] 内容加速黑科技趣谈
  • puppet连载22:define用法
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #define
  • #define 用法
  • (+4)2.2UML建模图
  • (6)STL算法之转换
  • (Note)C++中的继承方式
  • (zt)最盛行的警世狂言(爆笑)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (七)Java对象在Hibernate持久化层的状态
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)为C# Windows服务添加安装程序
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net2005怎么读string形的xml,不是xml文件。
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net开发时的诡异问题,button的onclick事件无效
  • /bin/rm: 参数列表过长"的解决办法
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [] 与 [[]], -gt 与 > 的比较