SpringBoot整合Solr[超详细版]
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档
目录
简介
什么是solr
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。 Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能。Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
总之,Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据。
该文档需要所有相关的文件
链接:https://pan.baidu.com/s/1qlmHdVzeBymYhXPuU0upnA?pwd=5432
提取码:5432
一、Linux启动开启并配置solr服务器
首先,将solr.war包放入linux中
Solr安装
1:安装 Tomcat,解压缩即可。
2:解压 下载好的solr-4.10.3.zip
3:把 solr-4.10.3下的dist目录solr-4.10.3.war部署到Linux中的 Tomcat\webapps下(去掉版本号)。
- 通过 cp solr-4.10.3.war solr 复制粘贴方式 去除版本号
- 通过 mv solr-4.10.3.war solr 剪切粘贴方式 去除版本号
4:启动 Tomcat解压缩 war 包
5:把solr-4.10.3solr下example/lib/ext 目录下的所有的 jar 包,添加到 solr 的工程中(\WEB-INF\lib目录下)。
6:将solr-4.10.3solr下的/example/solr 目录放到linux的/usr/local/中并改名字为solrhome
- 先将solr-4.10.3solr下的/example/solr 目录放到linux中
- 通过 mv solr solrhome 来改名字
7、找到tomcat中的webapp/solr/WEB-INF/web.xml 文件
8、修改web.xml文件
9:重启 Tomcat
http://自己的ip:端口号/solr/
配置中文分析器 IK Analyzer
IK Analyzer简介
IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。从 2006年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 4 个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从 3.0 版本开始,IK 发展为面向 Java 的公用分词组件,独立亍 Lucene 项目,同时提供了对 Lucene 的默认优化实现。在 2012 版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 分词器从单纯的词典分词向模拟语义分词衍化。
IK Analyzer配置
1、在相关文件中解压IK Analyzer 2012FF_hf1.zip
2、把IKAnalyzer2012FF_u1.jar 添加到 /tomcat/webapp/solr/ 工程的 lib 目录下
3、在WEB-INF下创建classes
4、 把解压后的IK Analyzer 2012FF_hf1中的stopword.dic和IKAnalyzer.cfg.xml放到 solr 工程的 WEB-INF/classes 目录下。
5、修改 solrhome/collection1/conf 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
6、重启tomcat
二、solr域的使用
域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的Field(域),一般来说,每一种对应着一种数据,用户对同一种数据进行相同的操作。
域的常用属性:
- name:指定域的名称
- type:指定域的类型
- indexed:是否索引
- stored:是否存储
- required:是否必须
- multiValued:是否多值
总的来说:当我们想要查询数据时,自己设置域来找到对应的值信息
如果你想要通过名称查询数据时需要在自己的schema.xml 文件中配置域的name等信息来设置业务系统 Field
如下:
我在schema.xml中配置了两个域 名称分别为item_goodsid 和 item_title,而type因为item_title涉及到中文,所以使用刚才配置的中文解析器类型
复制域
复制域的作用在于将某一个Field中的数据复制到另一个域中
如下:
我配置了一个复制域,并且复制了一个item_title,当然可以配置很多个,这样我可以只通过查询item_keywords来查询复制域中所有的信息
好啦,上述配置大概就这些,接下来我们进入SpringBoot整合SolrDemo环节
三、SpringBoot整合Solr
springboot版本为:2.3.4.RELEASE
1、配置xml依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
2、配置yaml
spring:
data:
solr:
host: http://自己的ip:自己的端口号/solr
3、配置模版
import org.apache.solr.client.solrj.SolrClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.solr.core.SolrTemplate;
@Configuration
public class SolrConfig {
@Bean
public SolrTemplate solrTemplate(SolrClient solrClient){
return new SolrTemplate(solrClient);
}
}
4、创建实体类
public class TbItem implements Serializable{
@Field
private Long id;
@Field("item_title")
private String title;
//get set省略
}
5、测试
@SpringBootTest
public class SolrUtilTest {
@Autowired
SolrTemplate solrTemplate;
@Autowired
ItemMapper itemMapper;
@Test
public void testAdd(){
TbItem item=new TbItem();
item.setId(1L);
item.setTitle("华为Mate9");
solrTemplate.saveBeans("collection1",item);
solrTemplate.commit("collection1");
}
//条件查询
@Test
public void testPageQueryMutil(){
Query query=new SimpleQuery("*:*");
Criteria criteria=new Criteria("item_title");
query.addCriteria(criteria);
ScoredPage<Item> items = solrTemplate.queryForPage("collection1", query, Item.class);
System.out.print(items);
}
}
好了,上述就是demao环节结束了,快去使用吧!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)