上一篇博客中简要写了solr在windows的安装与配置,这一篇接上文写一下springboot整合solr,代码已经上传到github,传送门

1、新建core并配置schema

上篇博客中已经有了相关内容,就不在展开叙述了,具体仿照3.2和3.3的配置schema,原文地址https://www.cnblogs.com/wdfordream/p/11352053.html

solr create -c "book_core" ,配置分词器并且field类型定义为分词器类型。

  1. <fieldType name="ik_word" class="solr.TextField">
  2. <analyzer type="index">
  3. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
  4. <filter class="solr.LowerCaseFilterFactory"/>
  5. </analyzer>
  6. <analyzer type="query">
  7. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
  8. <filter class="solr.LowerCaseFilterFactory"/>
  9. </analyzer>
  10. </fieldType>
  11.  
  12. <!-- 自定义添加filed -->
  13. <field name="description" type="ik_word" indexed="true" stored="true"/>

配置完毕后启动solr。

2、相关配置

配置maven

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-solr</artifactId>
  4. </dependency>

配置application.properties相关solr的内容

  1. # solr配置
  2. spring.data.solr.host=http://localhost:8983/solr/book_core

如果想同时使用好几个core,通过HttpSolrClient solrClient = new HttpSolrClient(url);构造出对应core的solrClient进行相关操作。

3、solr增删改查

3.1、新增实体

  1. @SolrDocument(solrCoreName = "book_core")
  2. public class Book {
  3.  
  4. @Id
  5. @Field
  6. private String id;
  7.  
  8. @Field
  9. private String description;
  10.  
  11. public String getId() {
  12. return id;
  13. }
  14.  
  15. public void setId(String id) {
  16. this.id = id;
  17. }
  18.  
  19. public String getDescription() {
  20. return description;
  21. }
  22.  
  23. public void setDescription(String description) {
  24. this.description = description;
  25. }
  26. }

在这里要说明一下 实体类上的注解@field和@SolrDocument 是为了QueryResponse.getBeans()能转化成相关实体类,不然无法识别。

3.2增删改

  1. @Autowired
  2. SolrClient solrClient;
  3.  
  4. @Override
  5. public void add(Book book) {
  6. SolrInputDocument document = new SolrInputDocument();
  7. document.setField("id",book.getId());
  8. document.setField("description",book.getDescription());
  9. try {
  10. solrClient.add(document);
  11. solrClient.commit();
  12. } catch (SolrServerException e) {
  13. e.printStackTrace();
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18.  
  19. @Override
  20. public void delete(String query) {
  21. try {
  22. solrClient.deleteByQuery(query);
  23. solrClient.commit();
  24. } catch (SolrServerException e) {
  25. e.printStackTrace();
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30.  
  31. @Override
  32. public Book update(Book book) {
  33. try {
  34. solrClient.addBean(book);
  35. solrClient.commit();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. } catch (SolrServerException e) {
  39. e.printStackTrace();
  40. }
  41. return book;
  42. }

增加删除修改都差不多,增加和修改可以通过add(SolrInputDocument)和addBean,根据主键是否存在来判断是新增还是修改,删除可以通过主键或者条件进行删除。增删改之后一定要记得commit!

主键是在schema中配置的,默认有 id字段做主键,也可以自定义主键,在schema中配置。

通过add方法加了几个demo后,可以在solr管理页面的查询出查看添加的内容

3.3查询

查询则通过SolrQuery入参进行查询

  1. @Override
  2. public List<Book> queryAll() {
  3. List<Book> bookList = new ArrayList<Book>();
  4. SolrQuery solrQuery = new SolrQuery();
  5. solrQuery.setQuery("*:*");
  6. try {
  7. QueryResponse queryResponse = solrClient.query(solrQuery);
  8. if (queryResponse != null){
  9. bookList = queryResponse.getBeans(Book.class);
  10. }
  11. } catch (SolrServerException e) {
  12. e.printStackTrace();
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. return bookList;

同时我写了一个jsp页面来展示查询结果。

到此,增删改查的基本操作都已经实现了,更多高级用法可以参考官方api文档。

4、高亮

一开始在尝试使用高亮时发现无法起作用,排查后发现高亮是在QueryResponse中的另一个结果集的。QueryResponse.getHighlighting()

取出来的字段值为自定义前缀后缀拼接具体字段值。

  1. @Override
  2. public List<Book> query(String query) {
  3. List<Book> bookList = new ArrayList<Book>();
  4. SolrQuery solrQuery = new SolrQuery();
  5. //设置默认搜索的域
  6. solrQuery.set("df", "description");
  7. solrQuery.setQuery(query);
  8. //高亮显示
  9. solrQuery.setHighlight(true);
  10. //设置高亮显示的域
  11. solrQuery.addHighlightField("description");
  12. //高亮显示前缀
  13. solrQuery.setHighlightSimplePre("<font color='red'>");
  14. //后缀
  15. solrQuery.setHighlightSimplePost("</font>");
  16. try {
  17. QueryResponse queryResponse = solrClient.query(solrQuery);
  18. if (queryResponse == null){
  19. return null;
  20. }
  21. SolrDocumentList solrDocumentList = queryResponse.getResults();
  22. if (solrDocumentList.isEmpty()){
  23. return null;
  24. }
  25. //获取高亮
  26. Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();
  27. for (SolrDocument solrDocument : solrDocumentList){
  28. Book book;
  29. List<String> list = map.get(solrDocument.get("id")).get("description");
  30. if (!CollectionUtils.isEmpty(list)){
  31. solrDocument.setField("description",list.get(0));
  32. }
  33. String bookStr = JSONUtil.toJSON(solrDocument);
  34. book = JSON.parseObject(bookStr,Book.class);
  35. bookList.add(book);
  36. }
  37. } catch (SolrServerException e) {
  38. e.printStackTrace();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. return bookList;
  43. }

页面展示如下:

搜索框分词之后,搜索出来的带有高亮的值。

增删改查最基本的应用就差不多了,更高级的代码请查看官方api文档。上文中所有代码都上传至github,传送门

本人只是个小白,以上只是个人拙见,如果有问题还请大家指出,有更好的想法欢迎大家留言,一起进步,谢谢!

springboot整合solr的更多相关文章

  1. solr8.0 springboot整合solr(四)

    引言: solr搭建起后,就该应用到java后台开发里了,接下来就用springboot整合应用solr 一:引入jar包 <!--solr--> <dependency> & ...

  2. solr(四) : springboot 整合 solr

    前言: solr服务器搭起来, 数据导入之后, 就该应用到项目中去了. 那在项目中, 该怎么整合和应用solr呢? 接下来, 就来整合和应用solr 一. 整合 1. 引入jar包 <prope ...

  3. SpringBoot整合Redis、ApachSolr和SpringSession

    SpringBoot整合Redis.ApachSolr和SpringSession 一.简介 SpringBoot自从问世以来,以其方便的配置受到了广大开发者的青睐.它提供了各种starter简化很多 ...

  4. Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看

    一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...

  5. spring-boot整合mybatis(1)

    sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置.接下来开始spring-boot与mybatis的整合. 1.创建一个maven工程命名为spring-boot- ...

  6. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  7. springboot整合mq接收消息队列

    继上篇springboot整合mq发送消息队列 本篇主要在上篇基础上进行activiemq消息队列的接收springboot整合mq发送消息队列 第一步:新建marven项目,配置pom文件 < ...

  8. springboot整合mybaits注解开发

    springboot整合mybaits注解开发时,返回json或者map对象时,如果一个字段的value为空,需要更改springboot的配置文件 mybatis: configuration: c ...

  9. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

随机推荐

  1. Specifying the Code to Run on a Thread

    This lesson shows you how to implement a Runnable class, which runs the code in its Runnable.run() m ...

  2. 后端 - Lession 01 PHP 基础

    目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...

  3. vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)

    vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...

  4. python+selenium实现163邮箱登陆—iframe动态ID定位 及常用定位方法

    今天发现之前的登录163邮箱脚本定位不到iframe了,原因是iframe拼接了动态ID,修改后的脚本如下: from selenium import webdriver driver = webdr ...

  5. websocket的加密和解密过程

    加密: import struct msg_bytes = "the emperor has not been half-baked in the early days of the col ...

  6. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer

    对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...

  7. Android的步骤

    1.开发Activity步骤 第一步:写一个类继承Activity 第二步:重写oncreate方法 第三步:在主配置文件中注册activity <activity android:name=& ...

  8. Hadoop自学系列集(二) ---- CentOS下安装JDK

    上篇我们讲述了如何使用VMware安装CentOS系统,接下来就看如何安装我们最为熟悉的jdk吧!安装前先看看系统上有没有安装过jdk,输入java -version,如果查询出了其他版本的jdk版本 ...

  9. 一份关于.NET Core云原生采用情况调查

    调查背景 Kubernetes 越来越多地在生产环境中使用,围绕 Kubernetes 的整个生态系统在不断演进,新的工具和解决方案也在持续发布.云原生计算的发展驱动着各个企业转向遵循云原生原则(启动 ...

  10. IOS应用无法下载、此时无法安装应用程序

    无法安装应用 app开发者,进行程序测试,重试还不行,就重新打包, 个人,更改wifi的dns 在“设置” –> “WiFi” –> 进入当前的WiFi 进入之后点击旁边的叹号,然后进入之 ...