solr搜索引擎的引用

一 。solr简介

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

文章表

TYPE ASCII HTML
文章id 文章标题 文章内容
1 我爱中国 中国地大物博
2 香港是中国一部分 香港的英文是hongkong

倒排索引

索引 文章id
1
1
中国 1,2
香港 2
2
一部分 2

二。分词器

将中文拆分成有意义的词
常用的IK分词器,庖丁解牛分词器。

三。lucene

lucene是一个将text数据类型,分词建立索引的一个库,不适合企业级使用。
企业级考虑高可用问题。
solr是一个企业级应用的搜索引擎。
支持使用json格式提交数据。
json格式:

[] 代表数组
{} 对象(文档 document)
键值对 属性
{
id:1
hobby:[“篮球”,“上厕所”]
tt:{

 }

}
数据库表结构:

文章id 文章标题 文章内容
1 我爱中国 中国地大物博
2 香港是中国一部分 香港的英文是hongkong
模拟json
[
{
id:1,
title:‘我爱中国’,
content:‘中国地大物博’

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

},
{
id:2,
title:‘香港是中国一部分’,
content:‘香港的英文是hongkong’
}
]

solr安装

官网 dockerhub.com 搜索 solr

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

安装solr镜像
docker run --name my_solr -id --net host -t solr:5.5.5

检测端口:
netstat -aon | grep 8983
yum -y install net-tools
telnet 端口号 检测端口是否连接成功

创建core

  • -c指的是核的名字,–user 指的是solr的用户名,不可更改,必须填上
    docker exec -it --user=solr my_solr bin/solr create_core -c mycore

创建完成后提示:


Copying configuration to new core instance directory:
/opt/solr/server/solr/mycore  (所在路径)

Creating new core 'mycore' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore (可以通过该命令创建)
 
{
  "responseHeader":{
    "status":0,   (0==成功)
    "QTime":2137},  (创建的时间)
  "core":"mycore"}  (核名)

然后访问192.168.241.130:8983/solr

  • 注意:记得关机防火墙 systemctl stop firewalld

在这里插入图片描述

五。solr搜索

假设提交
{“id”:“change.me”,“title”:“change.me”}
q表示安装什么字段来搜索
字段名:值 (where 列名=值)
支持or 和and语法
比如 i:1 and j:2
比如 i[1 to 10]

模拟数据
{
“id”:“1”,
“title”:“我爱中国”,
“content”:“中国地大物博”
}

solr中文分词器配置

默认solr 没有使用中文分词器 所有搜索的词 都是整个句子就是一个词 搜索时 将单词全部写入才能搜索或者使用* 需要配置中文分词器目前比较好用的分词器 是IK 2012年停更 只支持到 Lucene4.7 所有 solr5.5 需要lucene5支持 需要修改部分源码来支持solr5.5 找到 IKAnalyzer类 需要重写 protected TokenStreamComponents createComponents(String fieldName) 方法 找到 IKTokenizer类 需要重写构造方法 public IKTokenizer(Reader in, boolean useSmart) 为 public IKTokenizer(boolean useSmart) {
在任意项目中 使用maven 引用lucene5 和ik

<dependencies>
		<dependency>
			<groupId>com.janeluo</groupId>
			<artifactId>ikanalyzer</artifactId>
			<version>2012_u6</version>
			<!--移除jar包-->
			<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>
		<!--导入5.5.5的jar包,这样就能保证Lucene4.7 以上的了-->
		<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>

创建一样的包和类,进行修改
在这里插入图片描述

去除多余的就好

 @Override
  protected TokenStreamComponents createComponents(String fieldName) {
    Tokenizer _IKTokenizer = new IKTokenizer(this.useSmart());
    return new TokenStreamComponents(_IKTokenizer);
  }

完成之后打开jar包,将里面的两个class 文件替换成自己新建的然后把jar包上传到solr里

find / -name lib 查找

jar拷贝到 /opt/solr/server/solr-webapp/webapp/WEB-INF/lib

进入core对应的目录
/opt/solr/server/solr/mycore
类型定义文件目录
/opt/solr/server/solr/mycore/conf/managed-scheme

docker cp my_solr:/opt/solr/server/solr/mycore/conf/managed-schema /opt/ika

修改文件 managed-schema

  • 定义分词器数据类型,400行左右那里
<fieldType name="text_ik" class="solr.TextField" >
    <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
    <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
  </fieldType>
  • indexed表示是否索引 stored表示是否存储
  • 定义动态字段
    <field name="_root_" type="string" indexed="true" stored="false"/>

修改后拷贝回去,记得重启

数据库数据迁移solr

拷贝支持导入的jar

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

  • 导入mysql的jar包(没有先去maven依赖下载)
    docker cp ./mysql-connector-java-5.1.14.jar my_solr:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib

  • 进入mycore/conf目录 新建连接数据的四要素 /opt/solr/server/solr/mycore/conf/data-config.xml

 <?xml version="1.0" encoding="UTF-8"?>  
<dataConfig>  
    <dataSource name="sourceOne" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.247:3306/unit02" user="root" password="123456" batchSize="-1" />  
<document>  
          <entity name="demo" pk="id"  dataSource="sourceOne"   
                query="select * from  demo" >
            <field column="id" name="id"/>  
            <field column="name_ik" name="name_ik"/> 
			<field column="content_ik" name="content_ik"/>  			
        </entity>
</document>  
</dataConfig>

docker cp ./data-config.xml my_solr:/opt/solr/server/solr/mycore/conf

  • 修改solrconfig.xml 指定data-c.xml文件
  • docker cp my_solr:/opt/solr/server/solr/mycore/conf/solrconfig.xml .
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">  
      <lst name="defaults">  
         <str name="config">data-config.xml</str>  
      </lst>  
 </requestHandler>

x修改后拷贝回来
docker cp ./solrconfig.xml my_solr:/opt/solr/server/solr/mycore/conf

在这里插入图片描述

完成进行搜索分词

猜你喜欢

转载自blog.csdn.net/weixin_43458790/article/details/84841712