在 windows 上使用 solr 全文搜索引擎

安装 solr

安装 jre 运行环境

已正确安装 JRE 运行环境。
JRE 安装请参考《JRE 安装指南》。

下载 solr

下载地址https://solr.apache.org/downloads.html ,如图所示:
image.png

或者:
http://archive.apache.org/dist/lucene/solr/

各系统适用版本见下表。

安装包版本 适用系统
solr-X.X.X-src.tgz Solr 源代码。可在不使用官方 Git 存储库的情况下在 Solr 上进行开
solr-X.X.X.tgz Linux/Unix/OSX
solr-X.X.X.zip Microsoft Windows

安装 Solr

使用解压工具解压安装包,解压即可启动。解压后目录结构如表所示:

目录名称 功能 次级文件/文件目录 功能
bin/ 包含几个重要的脚本,它们将使 Solr 的使用更容易 Solr、solr.cmd 是 Solr 的控制脚本,也称为 bin/solr(*nix) / bin/solr.cmd(Windows)。此脚本是启动和停止 Solr 的首选工具。在 SolrCloud 模式下运行时,您还可以创建集合或核心、配置身份验证和使用配置文件
post 提供了用于发布内容到 Solr 一个简单的命令行界面
solr.in.sh、solr.in.cmd 是 *nix 和 Windows 系统的属性文件。Java、Jetty 和 Solr 的系统级属性在此处配置。使用 bin/solr/时可以覆盖其中许多设置 bin/solr.cmd,但这允许您在一个地方设置所有属性
install_solr_services.sh 此脚本在 *nix 系统上用于将 Solr 安装为服务
contrib/ 包括用于 Solr 特殊功能的附加插件 / /
dist/ 包含主要的 Solr .jar 文件 / /
docs/ 包含指向 Solr 的在线 Javadocs 的链接 / /
example/ 包含多种类型的示例,用于演示各种 Solr 功能 / /
licenses/ 包含 Solr 使用的第 3 方库的所有许可证 / /
server/ 是 Solr 应用程序的核心所在 /solr-webapp Solr 的 UI 管理
/lib Jetty libraries
/logs 日志文件
/resources 日志配置
/solr/configsets 示例配置集

启动 solr

Solr 包括一个名为 bin/solr(Linux/MacOS) 或 bin\solr.cmd(Windows)的命令行界面工具。该工具允许您启动和停止 Solr、创建核心和集合、配置身份验证以及检查系统状态。
要使用它来启动 Solr,只需在解压后的 bin 目录下打开命令行,执行命令:

1
./solr start

几条常用命令

1
2
3
4
solr start –p 端口号 #单机版启动solr服务
solr restart –p 端口号 #重启solr服务
solr stop –p 端口号 #关闭solr服务

这将在后台启动 Solr,侦听端口 8983。当您在后台启动 Solr 时,脚本将等待以确保 Solr 正确启动,然后再返回命令行提示符。
启动完成后默认监听 8983 端口,管理界面访问地址:http://localhost:8983/solr/

停止 Solr

在 bin 目录下执行命令:
./solr stop -all
注:停止时必须指定端口。

安装 php 扩展 solr .dll

0、环境

  1. 操作系统:Windows10
  2. solr: 8.9.0
  3. php:7.3 (nts)

1、扩展说明

扩展地址:
https://pecl.php.net/
确定线性与非线性
Non Thread Safe (NTS) x64 / Thread Safe (TS) x64
通过 phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全
如果是:enabled,一般来说应该是 ts 版,否则是 nts 版。

2、安装 php 扩展
打开扩展下载地址:
https://pecl.php.net/package/solr
选择版本后面的 dll 文件(我用的是 2.5.1 版本的 dll)
https://windows.php.net/downloads/pecl/releases/solr/2.5.1/php_solr-2.5.1-7.3-nts-vc15-x64.zip
并点击下载。
image.png
下载成功后,解压获取:

  1. php_solr.dll
  2. php_solr.pdb

将压缩包的 php_solr.dll、php_solr.pdb 放到你的 php 扩展目录下 php/ext/ 下。
php.ini 中加入 extension=php_solr.dll
image.png

我的集成环境位置: D:\phpEnv\php\php-7.3\ext
重启服务器,查看 phpinfo(),
是否有显示 solr 扩展加载成功。
image.png

常用操作

创建 core,-c 指定创建的 core 名
./solr create -c test_core1 1
删除 core,-c 指定删除的 core 名
./solr delete -c test_core1





二、创建核心

2.1 创建核心前准备工作

每个核心都是 solr 的一个实例,一个 solr 服务可以创建多个核心,每个核心都可以进行自己独立配置。

  • 1.切换至 solr_home\server\solr 目录,例如:E:\solr-8.1.1\server\solr,在该目录下创建一个文件夹,文件夹名称与核心名称相同。 _v_images/2019062
  • 2.将 E:\solr-8.1.1\server\solr\configsets_default 路径下的 conf 文件夹复制到 new_core 目录(E:\solr-8.1.1\server\solr\new_core)下。

2.2 创建核心

方式一:打开 solr 界面,进行如图顺序操作。

这种方式 需要 在 E:\solr-8.1.1\server\solr 目录下创建 new_core 文件夹

方式二:bin 目录下输入命令:solr create -c new_core (推荐)

三、schema

每个核心 core 中都有这么一个 schema 配置文件。 schema 文件可以对索引库的数据类型进行定义,对字段是否进行索引、存储等进行配置,需要针对狠心单独进行配置。 schema 的数据类型进本够用,如果不能满足需求,比如说对中文分词、拼音分词等,就可以自定义分词器。 Solr8.1.1 的 schema 的配置文件名 为 managed-schema,home\server\solr\new_core\conf\managed-schema(E:\solr-8.1.1\server\solr\core_issuer\conf)。

3.1 schema 主要成员

  • (1) fieldType:为 field 定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。
  • (2) analyzer:fieldType 的子元素,是分词器,由 tokenizer 和 filter 组成。例如

复制代码

  • (3) field:字段,用来创建索引,如果这个字段需要生成索引,则需要设置的 indexed 为 true,需要存储设置 stored 属性为 true。例如:

复制代码

3.2 添加索引字段

  • 方式一:直接修改 managed-schema 配置文件(不推荐,修改后需要重启服务),例如:
  • 方式二:通过 solr 页面进行添加。(推荐,不需要重启服务)

![](_v_images/20190623133627274_22114.png =811x)

3.3 配置中文分词工具

  • 1.下载中文分词器 IKAnalyzer,下载地址,密码:igt9。
  • 2.解压压缩包包,目录如下:

  • 3.将两个 jar 包复制到该路径下:E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib。
  • 4.另外将三个配置文件复制到该路径下:E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\classes。如果没有 classes 文件夹就新建一个。
  • 5.在 schema 中添加分词器。
1
2
3
4
5
6
7
8
9
10
11
<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>

  • 6.在 ext.dic 文件中添加自定义的中文词组
  • 需要重启 solr

效果如下:

四、导入索引数据(mysql 数据为例)

  • 1.创建 mysql 数据库

  • 2.在该路径下 solr_home\server\solr\new_core\conf(E:\solr-8.1.1\server\solr\core_issuer\conf)下新建 my-data-config.xml 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr_test"
user="root" password=""/>
<document>
<entity name="user" query="select * from user">
<field column="id" name="id"/>
<field column="age" name="age"/>
<field column="name" name="name"/>
<field column="hobby" name="hobby"/>
</entity>
</document>
</dataConfig>

  • 3.用 solr 添加数据库字段对应的索引字段,添加后打开 managed-schema 文件会看到:
1
2
3
4
<field name="name" type="string" indexed="true" stored="true"/>
<field name="age" type="pint" indexed="true" stored="true"/>
<field name="hobby" type="string" indexed="true" stored="true"/>

请勿添加 id 字段,该字段已存在,添加会报错

  • 4.打开该路径下文件:solr_home\server\solr\new_core\conf\solrconfig.xml(E:\solr-8.1.1\server\solr\core_issuer\conf\solrconfig.xml),随便找一个与 requestHandler 同级节点上添加以下配置。如图:

1
2
3
4
5
6
7
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">my-data-config.xml</str>
</lst>
</requestHandler>


  • 5.将 solr_home\dist(E:\solr-8.1.1\dist)目录下的 solr-dataimporthandler-8.1.1.jar 和 MySQL 驱动(随便找个 MySQL 驱动)复制到 solr_home\server\solr-webapp\webapp\WEB-INF\lib(E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib)目录下。
  • 6.重启 solr 服务。
  • 7.打开 solr 页面,进行下面操作。

  • 8.检测数据是否导入成功

如果对索引字段进行中文分词

添加对索引字段时,fileType :选择 text_ik

效果如图: 查询 鲁西化工 的结果

七、删除索引库(删除所有数据)的两种方法

  • 1.删除索引库所有数据的方法一:直接用 solr 可视化界面删除