该文章正在筹划中,Solr的基础将对照elasticSearch的知识架构进行对比分析
本文根据Solr指南提取的核心要点,具体参见Solr官方文档-中文版
Solr 入门
Solr快速概述
Solr 是一个基于 Apache Lucene 之上的搜索服务器,它是一个开源的、基于 Java 的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处,Solr 都可以为您服务。
Solr 可以通过以下步骤轻松地添加在在线商店搜索的功能:
- 定义一个模式。该模式告诉 Solr 关于它将被索引的文档的内容。在在线商店的示例中,模式将定义产品名称、描述、价格、制造商等定义的字段。Solr 的模式是强大而灵活的,可以让您根据自己的应用程序定制 Solr 的行为。有关详细信息,请参阅文档、字段和模式设计。
- 您的用户将搜索的 Feed Solr 文档。
- 在您的应用程序中公开搜索功能。
关键概念 Shard&replica
安装Solr
这里只提供测试单机安装说明,具体到生产环境安装需要做另行说明
软件包安装
tar zxf solr-7.0.0.tgz
目录布局
- bin
此目录中包含几个重要的脚本,这些脚本将使使用 Solr 更容易。
-
solr 和 solr.cmd
这是Solr 的控制脚本,也称为bin/solr(对于 * nix)或者bin/solr.cmd(对于 Windows)。这个脚本是启动和停止 Solr 的首选工具。您也可以在运行 SolrCloud 模式时创建集合或内核、配置身份验证以及配置文件。
-
post
Post Tool,它提供了用于发布内容到 Solr 的一个简单的命令行界面。
-
solr.in.sh 和 solr.in.cmd
这些分别是为 * nix 和 Windows 系统提供的属性文件。在这里配置了 Java、Jetty 和 Solr 的系统级属性。许多这些设置可以在使用bin/solr或者bin/solr.cmd时被覆盖,但这允许您在一个地方设置所有的属性。
-
install_solr_services.sh
该脚本用于 * nix 系统以安装 Solr 作为服务。在 “将Solr用于生产 ” 一节中有更详细的描述。
-
-
contrib
Solr 的contrib目录包含 Solr 专用功能的附加插件。
-
dist
该dist目录包含主要的 Solr .jar 文件。
-
docs
该docs目录包括一个链接到在线 Javadocs 的 Solr。
-
example
该example目录包括演示各种 Solr 功能的几种类型的示例。有关此目录中的内容的详细信息,请参阅下面的 Solr 示例。
-
licenses
该licenses目录包括 Solr 使用的第三方库的所有许可证。
-
server
此目录是 Solr 应用程序的核心所在。此目录中的 README 提供了详细的概述,但以下是一些特点:
- Solr 的 Admin UI(server/solr-webapp)
- Jetty 库(server/lib)
- 日志文件(server/logs)和日志配置(server/resources)。有关如何自定义 Solr 的默认日志记录的详细信息,请参阅配置日志记录一节。
- 示例配置(server/solr/configsets)
启动 Solr
这里只列出了单机启动的命令实例,更多生产环境的实例,后续介绍
bin/solr start
- 检查 Solr 是否正在运行
bin/solr status
Solr 正在运行。如果您需要有说服力的证明,请使用 Web 浏览器查看管理控制台:solr本地管理界面
- 创建核心
bin/solr create -c <name>
这将创建一个使用数据驱动模式的核心,当您将文档添加到索引时,该模式会尝试猜测正确的字段类型。
Solr配置文件
Solr Home
当您第一次安装 Solr 时,您的主目录是:server/solr。但是,一些示例可能会更改此位置(例如,如果您运行:bin/solr start -e cloud,您的主目录将会是:example/cloud)
- 示例-独立模式
<solr-home-directory>
solr.xml
core_name1/
core.properties
conf/
solrconfig.xml
managed-schema
data/
core_name2/
core.properties
conf/
solrconfig.xml
managed-schema
data/
- 示例-SolrCloud 模式
<solr-home-directory>
solr.xml
core_name1/
core.properties
data/
core_name2/
core.properties
data/
Solr 配置文件
- solr.xml:为您的 Solr 服务器实例指定配置选项。有关 solr.xml 的更多信息,请参阅:Solr Cores 和 solr.xml。
- 每个 Solr 核心:
- core.properties:为每个核心定义特定的属性,例如其名称、核心所属的集合、模式的位置以及其他参数。有关 core.properties 的更多详细信息,请参阅定义 core.properties 一节。
- solrconfig.xml:控制高级行为。例如,您可以为数据目录指定一个备用位置。有关 solrconfig.xml 的更多信息,请参阅 配置 solrconfig.xml。
- managed-schema(或用 schema.xml 替代)描述您将要求 Solr 索引的文档。模式将文档定义为字段集合。您可以同时定义字段类型和字段本身。字段类型定义功能强大,包含有关 Solr 如何处理传入字段值和查询值的信息。有关 Solr 架构的更多信息,请参阅文档、字段和模式设计以及模式 API。
- data/:包含低级索引文件的目录。
SolrCloud 示例不包括每个 Solr Core 的 conf 目录(所以没有 solrconfig.xml 或 Schema 文件)。这是因为通常在 conf 目录中找到的配置文件存储在ZooKeeper 中,所以它们可以在群集中传播。
Solr 运维篇
这里涉及的主要是solr的运维,非重要讲解知识,以后会有专门的实践说明
Solr版本升级说明
将Solr应用到生产
主要是讲解将solr以服务安装脚本安装的solr环境
升级Solr集群
Solr控制脚本
启动Solr
bin/solr start [options]
bin/solr start -help
bin/solr restart [options]
bin/solr restart -help
- SolrCloud 模式
-c 和 -cloud 选项是相同的:
bin/solr start -c
bin/solr start -cloud
如果你指定一个 ZooKeeper 连接字符串,例如:-z 192.168.1.4:2181,那么 Solr 将连接到 ZooKeeper 并加入集群。
如果在 cloud 模式下启动 Solr 时没有指定 -z 选项,Solr 将启动一个嵌入式 ZooKeeper 服务器监听 Solr 端口 + 1000,也就是说,如果 Solr 在端口 8983 上运行,则嵌入式 ZooKeeper 将监听端口 9983 。
注意:如果您的 ZooKeeper 连接字符串使用 chroot (如 localhost:2181/solr),则需要在使用 bin/solr 脚本启动 SolrCloud 之前创建 /solr znode。要执行此操作,请使用下面概述的 mkroot 命令,例如: bin/solr zk mkroot/solr-z 192.168.1. 4:2181
停止 Solr
bin/solr stop [options]
bin/solr stop -help
Solr系统信息
- Solr 版本信息
$ bin/solr version
- Solr 状态信息
bin/solr status
- Healthcheck
bin/solr healthcheck [options]
bin/solr healthcheck -help
Solr集合和核心
- 创建一个核心或集合
bin/solr create [options]
bin/solr create -help
删除核心或集合
bin/solr delete [options]
bin/solr delete -help
Solr身份验证
ZooKeeper操作
bin/solr 脚本允许某些操作影响 ZooKeeper。这些操作仅适用于 SolrCloud 模式。这些操作可以作为子命令使用,每个子命令都有自己的一组选项。
bin/solr zk [sub-command] [options]
bin/solr zk -help
上传配置集
bin/solr zk upconfig -z 111.222.333.444:2181 -n mynewconfig -d /path/to/configset
- -n
:ZooKeeper 中配置集的名称。这个命令会把配置集上传给“配置” ZooKeeper 节点,给它指定名字 - -d
:要上传的配置集的路径。它应该在它下面有一个“conf” 目录,该目录又包含 solrconfig.xml 等。如果只提供一个名字,则将检查$SOLR_HOME/server/solr/configsets的名称。可能会提供一个绝对路径。 - -z
:ZooKeeper 连接字符串。如果在 ZK_HOST 定义了solr.in.sh或者solr.in.cmd,则它是不必要的。
注意:更改配置时重新加载集合,此命令不会自动使更改生效!它只是将配置集上传到 ZooKeeper。您可以使用集合 API 的 RELOAD 命令重新加载使用此配置集的所有集合。
下载配置集
bin/solr zk downconfig -z 111.222.333.444:2181 -n mynewconfig -d /path/to/configset
“最佳做法” 是将您的配置集以某种形式的版本控制作为 system-of-record。在这种情况下,很少使用 downconfig。
在本地文件和 ZooKeeper znodes 之间复制
- 从本地递归复制一个目录到 ZooKeeper
bin/solr zk cp -r file:/apache/confgs/whatever/conf zk:/configs/myconf -z 111.222.333.444:2181
- 将一个文件从 ZooKeeper 复制到本地
bin/solr zk cp zk:/configs/myconf/managed_schema /configs/myconf/managed_schema -z 111.222.333.444:2181
- ZK 复制参数
- -r:可选的。执行一个递归的副本。如果
没有指定 “-r”,那么该命令将失败。 -
:要从中复制的文件或路径。如果前缀为zk:则源被假定为 ZooKeeper。如果没有前缀或前缀是 "file:",则为本地驱动器 -
:要复制到的文件或路径。如果前缀为 zk: 则源被假定为 ZooKeeper。如果没有前缀或前缀是 file: 这是本地驱动器。 - -z
:ZooKeeper 连接字符串。如果在 ZK_HOST 中定义了solr.in.sh或者olr.in.cmd,则它是不必要的。
- -r:可选的。执行一个递归的副本。如果
从 ZooKeeper 中删除一个 znode
bin/solr zk rm -r /configs
bin/solr zk rm /configs/myconfigset/schema.xml
将一个 ZooKeeper znode 移动到另一个(重命名)
bin/solr zk mv /configs/oldconfigset /configs/newconfigset
列出 ZooKeeper znode 的子项
bin/solr zk ls -r /collections/mycollection
bin/solr zk ls /collections
创建一个 znode(支持 chroot)
使用 zk mkroot 命令来创建一个 znode。此命令的主要用途是支持 ZooKeeper 的 “chroot” 概念。但是,它也可以用来创建任意路径。
bin/solr zk mkroot /solr -z 123.321.23.43:2181
bin/solr zk mkroot /solr/production
solr 5.2.1 部署测试
上传配置
NOTE: 注意zk的路径.solr的conf配置文件中指定公共lib的目录,以solr 实际安装目录为准
<lib dir="/data/Share/solr/lib/" regex=".*\.jar" />
./server/scripts/cloud-scripts/zkcli.sh -zkhost localhost:2181/galaxy2/solr -cmd upconfig -confname app -confdir
/home/liaojinlong/Share/GitWorkPlace/review.rnd.meizu.com/search/galaxy2/galaxy2-solr-configs/appstore/conf
创建collection
http://localhost:8080/solr/admin/collections?action=CREATE&name=app&collection.configName=app&numShards=1&replicationFactor=1&maxShardsPerNode=1&createNodeSet=localhost:8080_solr
配置拼音分词
<fieldType name="text_pinyin_split_1" class="solr.TextField" positionIncrementGap="0">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="1" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="2" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="1" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="2" maxGram="20" />
</analyzer>
</fieldType>