【分布式搜索】- Solr - 基础概念篇

该文章正在筹划中,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,则它是不必要的。

从 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>

Search

    Post Directory