solr7.4安装使用

solr 读音应该是叫 “so lar”

之前写过一篇介绍solr的文章https://zhangdianlei.github.io/2018/09/11/Apache-Solr/ ,这里就不再啰嗦solr的事情了。今天搞了一天的solr,现在记录一下

solr安装及使用:

  1. Linux环境下安装
  2. 添加环境变量
  3. 启动solr,简单了解solr
  4. 新建Core
  5. 从数据库导入数据
  6. 数据查询

下面详解介绍每一部分。

Linux环境下安装solr

要求: 电脑上已经装了jdk8+

下载:建一个工作文件夹,执行下载命令:

1
wget http://mirrors.shuosc.org/apache/lucene/solr/7.4.0/solr-7.4.0.tgz

解压安装:

1
tar -zxvf solr-7.4.0.tgz

添加环境变量

将solr添加到环境变量,可以快速的启动、重启、关闭等,非常有必要。

编辑文件:

1
vim /etc/profile

下面是我的配置:

1
2
3
4
5
6
7
export JAVA_HOME=/root/software/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

# solr environment
export SOLR_INSTALL_HOME=/root/solr-7.4.0
export PATH=$SOLR_INSTALL_HOME/bin:$PATH

然后执行:

1
source /etc/profile

使得配置文件生效

然后可以执行以下命令验证配置成功:

1
solr start

启动solr,简单了解solr

启动、重启、关闭命令:

1
2
3
solr start
solr restart
solr stop

有时系统因安全问题考虑,可能需要在命令后加上

1
2
3
4
5
6
7
8
9
10
11
12
13
14

solr启动后,访问 ```http://ip:8983/solr```之后,将访问web管理界面:

<img src="https://ws1.sinaimg.cn/large/006tNbRwly1fvg4qwbplfj31bl0hu42d.jpg" width=800px height=300px />



### 新建Core

每个人新建Core的方法,和配置方法都不一样,在此,仅记录我的创建和配置方法。

<img src="https://ws1.sinaimg.cn/large/006tNbRwly1fvg4yqgmxxj30yx0b6jtj.jpg" width=800px height=250px />

先在 ```Core Admin --> Add Core```确认添加,会报一个找不到文件的错误,然后这时候,需要将标准配置文件,添加到刚才新增的Core下面,标准配置文件在 ```~SolrDir/server/solr/configsets/_default/conf```下面,假设当前目录为solr根文件夹下,新的Core名字为```new_core```,执行:

cp -r server/solr/configsets/_default/conf server/solr/new_core

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

新建```Core```完成!

### 导入数据库数据

在上一步导入的Conf目录下,修改以下配置:

在 ```solrconfig.xml```下添加以下配置,添加位置大约在 680行,```SearchHandler```配置上面:

```xml
<!-- Request Handlers
http://wiki.apache.org/solr/SolrRequestHandler
Incoming queries will be dispatched to a specific handler by name
based on the path specified in the request.

If a Request Handler is declared with startup="lazy", then it will
not be initialized until the first request that uses it.
-->

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

<!-- SearchHandler
http://wiki.apache.org/solr/SearchHandler
For processing Search Queries, the primary Request Handler
provided with Solr is "SearchHandler" It delegates to a sequent
of SearchComponents (see below) and supports distributed
queries across multiple shards
-->

data-config.xml```,然后 ```wq```保存退出即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

该文件的配置如下,连接的是```postgresql```,如果是连```mysql```的话,需要改一下driver即可(```com.mysql.jdbc.Driver```):

```xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source"
type="JdbcDataSource"
driver="org.postgresql.Driver"
url="jdbc:postgresql://localhost:3306/test_db"
user="root"
password="abc123"
/>
<document>
<entity name="person"
pk="id"
dataSource="source"
query="select * from person"
deltaImportQuery="select * from person where id = '${dih.delta.id}'"
deltaQuery="select id from person where update_date > '${dataimporter.last_index_time}' and status_flag = 'success'">
<field column="id" name="id"/>
<field column="update_date" name="update_date"/>
</entity>
</document>
</dataConfig>

这里,需要添加用到的驱动包,用到什么驱动下载什么,可以从mvn库下载(https://mvnrepository.com/),将数据连接驱动包下载之后,放到

solr\server\solr-webapp\webapp\WEB-INF\lib下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

简单说一下这三个query的作用:

**query:** 在全量导入时使用

**deltaImportQuery:**在增量导入时执行,其中的id来自于 **deltaQuery** 的查询结果。



在这之后,需要配置```managed-schema```文件,与数据库进行映射,在117行附近,添加与数据库的映射,具体添加规则,不详细写了。

```xml
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>

<!-- add propertity -->
<field name="invoice_type" type="text_ik" indexed="true" stored="true" />
<field name="invoice_code" type="string" indexed="true" stored="true" />
<field name="invoice_num" type="string" indexed="true" stored="true" />

为了查询的效果,需要再配一下中文分词器,将下面配置放到其中,位置大约在358行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<fieldType name="text_gen_sort" class="solr.SortableTextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

<!-- add propertity -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
<analyzer type="query" useSmart="true"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>

当然,需要将中文分词包加到项目中,参考这篇文章吧: https://blog.csdn.net/guyan0319/article/details/81188977

数据查询

在solr的web管理界面上,可以执行测试query,具体的每个字段如何查,参考这篇文章:https://blog.csdn.net/sxg0205/article/details/81317563