Centos 7 安装 Solr 7 Ik 分词器


借鉴: https://blog.csdn.net/u013160017/article/details/81037279

一. 要安装 JDK…
二. 安装 Solr

下载地址: http://archive.apache.org/dist/lucene/solr/

1. 解压
[root@pyg leyou] tar -zxvf solr-7.4.0.gz 
2. 启动
[root@pyg leyou] solr-7.4.0/bin/solr start -force
  • 警告

    *** [WARN] *** Your Max Processes Limit is currently 3806. It should be set to 65000 to avoid opera
    
  • 解决

    solr-7.5.0/bin/solr.in.sh文件中,SOLR_ULIMIT_CHECKS设置为false,消除WARN

访问: ip 地址 192.168.174.100根据自己更换

http://192.168.174.100:8983/solr/#/
3. 可能出现问题解决

​ 如果执行./solr start -force命令的时候会警告你系统文件打开数的问题,可以这样解决。修改完后要重启系统。

  1. 修改 /etc/sysctl.conf 文件, 在最后一行添加

    fs.file-max = 6553560
    
  2. 修改 /etc/security/limits.conf 文件,在最后一行添加

 ```shell
 * soft nproc 65535                 //注意,前面的星号也需要
 * hard nproc 65535
 * soft nofile 65535
 * hard nofile 65535
 ```

​ 如果出现solr安装成功,但是外界访问不到的问题,请检查防火墙是否关闭,或者8983端口是否允许开放!

​ 关闭防火墙的命令:

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

​ 开启端口的命令:

firewall-cmd --zone=public --add-port=8983/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
三、添加自己的solr core
1、创建core目录
[root@pyg solr] mkdir pyg-core
[root@pyg solr] pwd
/home/leyou/solr-7.4.0/server/solr
2. 复制配置文件
[root@pyg leyou] cp -r solr-7.4.0/server/solr/configsets/_default/conf/ solr-7.4.0/server/solr/pyg-core/
3、添加core
	在页面添加`pyg-core`(必须先做上面1、2步,不然会提示报错)。 
name: pyg-core
instanceDir: pyg-core

​ 其他默认, 点击Add Core,添加成功后.solr-7.4.0/server/solr/pyg-core/下会多两个东西。

core.properties文件
data目录
四、导入数据库中的数据到Solr中
1、创建****data-config.xml文件

​ 在solr-7.4.0/server/solr/pyg-core/conf目录下创建一个文件data-config.xml,与solrconfig.xml同级

[root@pyg leyou] touch ./solr-7.4.0/server/solr/pyg-core/conf/data-config.xml
2、修改solrconfig.xml文件

​ 修改solr-7.4.0/server/solr/new_core/conf/solrconfig.xml文件

[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/solrconfig.xml 

​ 在<requestHandler name="/select" class="solr.SearchHandler">上放增加以下这段代码。

<requestHandler name="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler">
       <lst name="defaults">
          <str name="config">data-config.xml</str>
       </lst>
</requestHandler>
	其中`<str name="config">data-config.xml</str>`里的内容就是我们在上一步创建的`data-config.xml`文件,将它们关联起来。 
3、修改data-config.xml文件
[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/data-config.xml 
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
	<dataSource 
				driver="com.mysql.cj.jdbc.Driver"
				url="jdbc:mysql://127.0.0.1:3306/db_pyg?serverTimezone=GMT%2B8&amp;useSSL=false"
				user="root"
				password="qwe123"/>
	<document>
		<entity name="brand" pk="pid" query="SELECT id, name, first_name FROM tb_brand">
		
		<field column="id" name="brand_id" />
		<field column="name" name="brand_product_name" />
		<field column="first_name" name="brand_first_name" />

		
		</entity>
	</document>
</dataConfig>

url : 访问数据库路径

driver: 这里是mysql8的, 如果是mysql5使用com.mysql.jdbc.Driver,

user, password正常填写即可

query: 你需要导入哪张表的哪些字段,查就行了

<field>标签中的columnSQL语句中查询的字段

name是 看 4、修改managed-schema文件 这里,与这里的fieldname`对应

	有多个查询字段就需要有多个`<field>`标签,每一个`<field>`标签对应一个字段。 

document: 配置数据库查询语句managed_schema域的对应关系。 目的是,在core导入数据的时候,会先通过该配置信息链接到数据库通过查询语句把数据查询出来,通过数据库字段managed_schema域关联关系创建索引

4、修改managed-schema文件
[root@pyg leyou] vim solr-7.4.0/server/solr/pyg-core/conf/managed-schema 

将刚才在data-config.xml中配置的<field>标签添加进来。

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <!-- docValues are enabled by default for long type so we don't need to index the version field  -->
    <field name="_version_" type="plong" indexed="false" stored="false"/>
    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <!-- 上面是原有的的字段不用管 -->     
 
    <!-- 自己的导入的字段 -->
	<field name='brand_id' type="plong" indexed="true" stored="true" />
	<field name='brand_name' type="string" indexed="true" stored="true" />
	<field name='brand_first_name' type="string" indexed="true" stored="true" />

<field>里的name :

​ 域的名称: 与data-config.xml里面数据库字段里面的name 对应

​ 特点: 唯一,不能重复, 这里定义成跟数据库表字段的名称,方便使用。当然,也可以定义成其他名字。

type :

​ 是表示这个字段的类型是什么,string是字符串类型,int是整形数据类型,date是时间类型,相当于数据库里面的timestamp。

indexed:

​ 表示是否索引,索引的话就能查询到,否则,搜索的时候,不会出现。

stored:

​ 表示是否存储到索引库里面。

required

​ 是否必须

multiValued:

​ 是否多值,比如商品信息中,一个商品有多张图片,一个Field想存储多个值的话,必须将multiValued设置为true

5、下载连接数据库和导入数据的jar包

现在涉及到数据库了,肯定需要依赖一些jar包,下载三个jar包 下载地址:http://mvnrepository.com/

如果打开慢可以使用 阿里仓库地址:

https://maven.aliyun.com/mvn/search 搜索

mysql-connector-java-8.0.16.jar

solr-dataimporthandler-7.4.0.jar

solr-dataimporthandler-extras-7.4.0.jar

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-dataimporthandler</artifactId>
    <version>7.4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-dataimporthandler-extras</artifactId>
    <version>7.4.0</version>
</dependency>

三个jar包 放到solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib 目录下

然后打开solr-7.4.0/server/solr/pyg-core/conf/solrconfig.xml,引用上面提到的jar包,如下。

<!-- mysql导入增加的包开始--> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" /> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> 
<!-- mysql导入增加的包结束-->

关闭然后重启

./bin/solr stop -all    		# 停止
./bin/solr start -force   		# 开启
./bin/solr restart -force  		# 重启
6、导入数据

再次访问我们刚才的页面,在左侧找到我们部署好的pyg-core工程,点击Dataimport,再选择full-import(全部导入),点击Execute,出现下面的页面,证明这张表的数据已经导入进来了。

img

如果出错: >/ , < , 检查 data-config.xml文件是否写错

五、IK 分词器

github https://github.com/magese/ik-analyzer-solr

使用说明
  • jar包下载地址:GitHub version

  • 历史版本:[[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxkRjohi-1586746638654)(https://camo.githubusercontent.com/8841ff97958a3cec0f15a5622ef473423aa4574c/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f636f6d2e6769746875622e6d61676573652f696b2d616e616c797a65722e7376673f7374796c653d666c61742d737175617265)]](https://search.maven.org/search?q=g:com.github.magese AND a:ik-analyzer&core=gav)

    <!-- Maven仓库地址 -->
    <dependency>
        <groupId>com.github.magese</groupId>
        <artifactId>ik-analyzer</artifactId>
        <version>7.4.0</version>
    </dependency>
    
Solr-Cloud
单机版Solr
  1. 下载 github项目到虚拟机 master.zip

    [root@pyg leyou] unzip master.zip  # github源码, 解压之后是 ik-analyzer-solr-master文件夹
    
  2. 将jar包放入Solr服务的JettyTomcatwebapp/WEB-INF/lib/目录下;

    ​ 使用上面 maven坐标下载或者在 https://maven.aliyun.com/mvn/search 阿里仓库下载 ik-analyzer-7.4.0.jar, 把 jar 上传到 linux中

    [root@pyg leyou] mv ik-analyzer-7.4.0.jar ./solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib/
    
  3. resources目录下的5个配置文件放入solr服务的JettyTomcatwebapp/WEB-INF/classes/目录下;

    [root@pyg leyou] cp ik-analyzer-solr-master/src/main/resources/ ./solr-7.4.0/server/solr-webapp/webapp/WEB-INF/classes/  # 如果没有 classes 创建 classes
    
    ① IKAnalyzer.cfg.xml
    ② ext.dic
    ③ stopword.dic
    ④ ik.conf
    ⑤ dynamicdic.txt
    
  4. 配置Solr的managed-schema,添加ik分词器,示例如下;

    <!-- ik分词器 -->
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer type="index">
          <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
          <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
          <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
          <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    
  5. 启动Solr服务测试分词;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrsDZcQ8-1586746638655)(https://github.com/magese/ik-analyzer-solr/raw/master/img/analyzer.png)]

    如果页面报错:
    可能是上面的 jar 没有放对位置, 注意上传位置
  6. IKAnalyzer.cfg.xml配置文件说明:

    名称类型描述默认
    use_main_dictboolean是否使用默认主词典true
    ext_dictString扩展词典文件名称,多个用分号隔开ext.dic;
    ext_stopwordsString停用词典文件名称,多个用分号隔开stopword.dic;
  7. ik.conf文件说明:

    files=dynamicdic.txt
    lastupdate=0
    
    1. files为动态词典列表,可以设置多个词典表,用逗号进行分隔,默认动态词典表为dynamicdic.txt
    2. lastupdate默认值为0,每次对动态词典表修改后请+1,不然不会将词典表中新的词语添加到内存中。lastupdate采用的是int类型,不支持时间戳,如果使用时间戳的朋友可以把源码中的int改成long即可; 2018-08-23 已将源码中lastUpdate改为long类型,现可以用时间戳了。
  8. dynamicdic.txt 为动态词典

    在此文件配置的词语不需重启服务即可加载进内存中。 以#开头的词语视为注释,将不会加载到内存中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值