solr应用入门实例

教程网址:https://blog.csdn.net/liaomin416100569/article/details/77301756

一 、solr简介

       solr是以lucene为内核开发的企业级搜索应用 应用程序可以通过http请求方式来提交索引,查询索引,提供了比lucene更丰富的查询语言,是

一个高性能,高可用环境全文搜索引擎

二、核与文档的概念

       核(core):是用于存储json格式的数据,等价于mysql中数据库的概念
       文档:一个json对象就是一个文档 相同属性的json数组集合就是一个表

三、使用dokcer安装solr安装

       这里下载 solr-5.5.5的镜像

[root@localhost ~]# docker pull solr:5.5.5

       创建一个名为 my_solr1 的的容器

[root@localhost ~]# docker run --name my_solr1 -id --net host -t solr:5.5.5

       在 my_solr1 容器中使用 solr 账号创建一个名字是 mycore 的核

[root@localhost ~]# docker exec -it --user=solr my_solr1 bin/solr create_core -c mycore

       创建完成后有以下提示
在这里插入图片描述

解释:
       --user=solr:表示用solr这个账号去执行这个命令(solr是默认用户)
       create_core -c mycore:创建一个名字是mycore的核(也可以认为是数据库的名字)

查看网页:ip:8983/solr/
       ip:指linux系统的ip
在这里插入图片描述
Documents:表示在里面新增一些json数据
Query:表示查询,在没有分词的情况下相当于数据库里面的:键=值(全文字匹配)


四、配置中文分词器

       默认solr 没有使用中文分词器 所有搜索的词 都是整个句子就是一个词 搜索时 将单词全部写入才能搜索或者使用* 需要配置中文分词器目前比较好用的分词器 是IK 2012年停更 只支持到 Lucene4.7 所有 solr5.5 需要lucene5支持 需要修改部分源码来支持solr5.5

扫描二维码关注公众号,回复: 4393247 查看本文章

       打开开发者工具,建立一个maven项目
在这里插入图片描述

       导入依赖

<!-- 将4.7.2的版本剔除,添加5.5.5版本的依赖 -->
	<dependencies>
		<dependency>
			<groupId>com.janeluo</groupId>
			<artifactId>ikanalyzer</artifactId>
			<version>2012_u6</version>
			<exclusions>
				<exclusion>
					<groupId>org.apache.lucene</groupId>
					<artifactId>lucene-core</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.lucene</groupId>
					<artifactId>lucene-queryparser</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.lucene</groupId>
					<artifactId>lucene-analyzers-common</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>5.5.5</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-queryparser</artifactId>
			<version>5.5.5</version>
		</dependency>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-analyzers-common</artifactId>
			<version>5.5.5</version>
		</dependency>
	</dependencies>

       重写 org.wltea.analyzer.lucene 包下的 IKTokenizer 类与 IKAnalyzer
在这里插入图片描述
       将重写的两个类进行修改
              IKAnalyzer.java
在这里插入图片描述
              IKTokenizer.java
在这里插入图片描述
       将ikanalyzer-2012_u6.jar包复制出来,并将重新编译好的IKAnalyzer.class和IKTokenizer.class复制进去
在这里插入图片描述
在这里插入图片描述
       进入linux系统,将jar包复制到my_solr1容器的 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib 目录下
              1.创建一个/opt/ika目录

[root@localhost ~]# cd /opt/ika

              2.使用rz命令将jar包导入到linux系统 (没有rz命令的自己上网去查,这里就不解释了)

[root@localhost ika]# rz

在这里插入图片描述
在这里插入图片描述
              3.将jar包导入my_solr1容器的 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib 目录下,然后重新启动容器

[root@localhost ika]# docker cp ./ikanalyzer-2012_u6.jar my_solr1:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib
[root@localhost ika]# docker stop my_solr
[root@localhost ika]# docker start my_solr

       定义分词器数据类型
              1.将容器中的managed-schema配置文件导出来进行修改

[root@localhost ika]# docker cp my_solr1:/opt/solr/server/solr/mycore/conf/managed-schema ./

              2.在这里我为了方便直接打开**Notepad++**进行修改
                            添加字段类型

# 添加一个名字是:text_ik的字段类型
  <fieldType name="text_ik" class="solr.TextField" >
# 表示在键索引和查询的时候使用IK分词器
      <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
      <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
  </fieldType>

                            添加动态字段

# 动态字段
# *_ik:表示将来添加的字段后面带有_ik都会用这里的,而不会自动添加
# text_ik: 表示将来_ik结尾的字段都会用text_ik字段类型
# indexed:表示是否分词
  <dynamicField name="*_ik" type="text_ik" indexed="true" stored="true"/>

在这里插入图片描述
                            将来增加字段和查询的时候想用分词,只要在字段的后面添加_ik就行了

              3.将修改好的配置文件拷贝回容器目录

[root@localhost ika]# docker stop my_solr1
[root@localhost ika]# docker cp ./managed-schema my_solr1:/opt/solr/server/solr/mycore/conf/
[root@localhost ika]# docker start my_solr1

小知识:如果分词器配置出错,在插数据的时候会报错

模拟分词查询

{
     "id":"3",
     "title_ik":"我爱中国",
     "content_ik":"中国地大物博"
 }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、数据库迁移

        假设存在表 solr 表示 其中 有以下数据:
在这里插入图片描述
        进入solr所在服务器 搜索 dataimport相关jar包

[root@localhost ika]# docker exec -it my_solr1 bash
solr@localhost:/opt/solr$ find / -name *import*.jar
/opt/solr/dist/solr-dataimporthandler-5.5.5.jar
/opt/solr/dist/solr-dataimporthandler-extras-5.5.5.jar

1.将这两个jar包拷贝到 solr启动应用 webapp/lib目录下

cp /opt/solr/dist/solr-dataimporthandler-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib
cp /opt/solr/dist/solr-dataimporthandler-extras-5.5.5.jar /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

2,将mysql的驱动包 丢到该目录下
        网址:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.14
        下载到桌面
在这里插入图片描述
        使用 rz 命令导入linux系统里面

[root@localhost ika]# rz

在这里插入图片描述
        将mysql包导入名字是my_solrsolr容器的WEB-INF/lib目录下

[root@localhost ika]# docker cp ./mysql-connector-java-5.1.14.jar my_solr1:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib

3.增加一个data-mysql.xml文件(配置连接的数据库以及查询的sql语句 ),这里我也拿Notepad++写了

<?xml version="1.0" encoding="UTF-8"?>  
<dataConfig>  
    <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.243:3306/m1dn" user="root" password="ps123456" batchSize="-1" />  
<document>  
          <entity name="solr" pk="solr_id"  dataSource="source1"   
                query="select * from  solr" >
            <field column="solr_id" name="id"/>
            <field column="solr_title" name="solr_title_ik"/>  
        </entity>
</document>  
</dataConfig>  

在这里插入图片描述
4.将data-mysql.xml文件拷贝到solr容器的/opt/solr/server/solr/mycore/conf目录下

[root@localhost ika]# docker cp ./data-mysql.xml my_solr1:/opt/solr/server/solr/mycore/conf

在这里插入图片描述
5.修改solr容器中的solrconfig.xml文件 将其指定为data-mysql.xml 文件
        将容器中的solrconfig.xml文件拷贝出来进行编辑

[root@localhost ika]# docker cp my_solr1:/opt/solr/server/solr/mycore/conf/solrconfig.xml .

注意:最后的 . 表示:当前目录

        打开notepad++编辑solrconfig.xml文件指定data-data.xml,添加:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
      <lst name="defaults">  
         <str name="config">data-mysql.xml</str>
      </lst>  
 </requestHandler>

注意:data-mysql.xml是指:你配置数据库配置的文件名
在这里插入图片描述
6.将solrconfig.xml文件拷贝回solr容器的/opt/solr/server/solr/mycore/conf目录下

[root@localhost ika]# docker cp ./solrconfig.xml my_solr1:/opt/solr/server/solr/mycore/conf
[root@localhost ika]# docker restart my_solr1

7.查看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提交之后,查询可能不会出来,重新刷新一下页面试试

六、springboot集成solr

1.创建一个项目
在这里插入图片描述
2.导入依赖

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-solr</artifactId>
		</dependency>
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <scope>provided</scope>
        </dependency>
	</dependencies>

3.构建一个实体类

在这里插入图片描述

@Data
@SolrDocument(solrCoreName="mycore")
public class SolrFiled {
	private String id;
	@Field("solr_title_ik")
	private String title;
}

4.增加一个main方法
在这里插入图片描述

@SpringBootApplication
public class SolrMain {
	@Bean
	public SolrTemplate solrTemplate(SolrClient client) {
		return new SolrTemplate(client);
	}

	public static void main(String[] args) {
		SpringApplication.run(SolrMain.class, args);
	}

}

5.建立html界面展示
在这里插入图片描述

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
	function query(){
		$.ajax({
			url:'queryList',
			dataType:'json',
			data:'keyword='+$("#myKey").val(),
			type:'get',
			success:function(data){
				$("#vessel").text(JSON.stringify(data));
			}
		})
	}
</script>
</head>
<body>
	新闻:<input id="myKey" type="text" name="keyword"/><button onclick="query()">提交</button>
	<div  id="vessel"></div>
</body>
</html>

6.增加一个配置文件:application.yml
在这里插入图片描述

spring: 
  data: 
    solr: 
      host: http://192.168.115.131:8983/solr
server: 
  port: 8888

7.建立controller层
在这里插入图片描述

@RestController
public class SolrController {
	
	@Autowired
	private SolrTemplate solrTemplate;
	
	@GetMapping("/queryList")
	public List<SolrFiled> query(String keyword){
		SimpleQuery sq = new SimpleQuery("solr_title_ik:"+keyword);
		Page<SolrFiled> query = solrTemplate.query(sq, SolrFiled.class);
		return query.getContent();
	}
}

8.执行main方法与效果展示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wufewu/article/details/84850050