Solr 控制脚本参考

Solr 包含一个名为“bin/solr”的脚本,它允许您对 Solr 安装或集群执行许多常见操作。

您可以启动和停止 Solr,创建和删除集合或核心,对 ZooKeeper 执行操作并检查 Solr 和配置的分片的状态。

您可以在 Solr 安装的 bin/ 目录中找到脚本。bin/solr 脚本通过提供简单的命令和选项来快速实现常见目标,从而使 Solr 更易于使用。

本指南中提供了 bin/solr 使用的更多示例,但特别是在 启动 SolrSolrCloud 入门 部分中。

启动和停止

启动和重启

start 命令启动 Solr。restart 命令允许您在 Solr 已经运行或已经停止时重新启动 Solr。

startrestart 命令有几个选项,允许您在 SolrCloud 模式下运行、使用示例配置集、从不是默认值的主机名或端口启动并指向本地 ZooKeeper 集群。

bin/solr start [options]

bin/solr start -help

bin/solr restart [options]

bin/solr restart -help

使用 restart 命令时,您必须传递在启动 Solr 时最初传递的所有参数。在后台,会发起停止请求,因此 Solr 将在重新启动之前停止。如果没有节点正在运行,则重启将跳过停止步骤并继续启动 Solr。

启动参数

bin/solr 脚本提供了许多选项,允许您以常见方式自定义服务器,例如更改侦听端口。但是,大多数默认值对于大多数 Solr 安装来说都是足够的,尤其是在刚开始使用时。

-a "<jvmParams>"

可选

默认值:无

使用附加 JVM 参数启动 Solr,例如以 -X 开头的参数。例如,设置 Java 调试器以附加到 Solr JVM,您可以传递:-a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18983"。在大多数情况下,您应该用双引号将附加参数括起来。

如果您传递以 -D 开头的 JVM 参数,则可以省略 -a 选项。

示例:

bin/solr start -a "-Xdebug -Xrunjdwp:transport=dt_socket, server=y,suspend=n,address=1044"
-j "<jettyParams>"

可选

默认值:无

启动 Solr 时传递给 Jetty 的附加参数。例如,要添加 Jetty 应读取的配置文件夹,您可以传递:-j "--include-jetty-dir=/etc/jetty/custom/server/"。在大多数情况下,您应该用双引号将附加参数括起来。

-cloud-c

可选

默认值:无

以 SolrCloud 模式启动 Solr,这还将启动 Solr 中包含的嵌入式 ZooKeeper 实例。嵌入式 ZooKeeper 实例在 Solr 端口+1000 上启动,因此如果 Solr 绑定到 8983,则为 9983。

如果您已经在运行一个 ZooKeeper 集群,并且您希望使用它而不是嵌入式(单节点)ZooKeeper,您还应该在 solr.in.sh/solr.in.cmd 中指定 ZK_HOST(请参阅 更新 Solr Include 文件)或传递 -z 参数。

有关更多详细信息,请参阅下面的 SolrCloud 模式 部分。

示例bin/solr start -c

-d <dir>

可选

默认值:server/

定义服务器目录,默认为 server(如 $SOLR_TIP/server)。很少会覆盖此选项。在同一主机上运行多个 Solr 实例时,更常见的是为每个实例使用相同的服务器目录,并使用 -s 选项使用唯一的 Solr 主目录。

示例bin/solr start -d newServerDir

-e <name>

可选

默认值:无

使用示例配置启动 Solr。通常,这些示例旨在帮助您更快地开始使用 Solr,或者只是尝试特定功能。

可用选项为

  • cloud:SolrCloud 示例

  • techproducts:综合示例,展示了 Solr 的许多核心功能

  • schemaless:无模式示例(模式在索引期间从数据中推断出来)

  • films:从 _default configset 开始并动态添加显式字段的示例

    有关示例配置的更多详细信息,请参阅下面的 使用示例配置运行 部分。

    示例bin/solr start -e schemaless

-f

可选

默认值:无

在前台启动 Solr,并将 stdout / stderr 发送到 solr-PORT-console.log。使用 -e 选项运行示例时,您不能使用此选项。

示例bin/solr start -f

-host <hostname>-h <hostname>

可选

默认值:localhost

为该 Solr 实例指定主机名。如果未指定此项,则假定为 localhost

示例bin/solr start -h search.mysolr.com

-m <memory>

可选

默认值:512m

设置运行 Solr 的 JVM 的最小(-Xms)和最大(-Xmx)堆大小。

示例bin/solr start -m 4g 会生成 -Xms4g -Xmx4g 设置。

-noprompt

可选

默认值:无

不要提示输入;在运行接受用户输入的示例时接受所有默认值。

例如,使用“cloud”示例时,交互式会话将指导您完成 SolrCloud 集群的多个选项。如果您想接受所有默认值,则只需向请求添加 -noprompt 选项即可。

示例bin/solr start -e cloud -noprompt

-p <port>

可选

默认值:8983

指定用于启动 Solr HTTP 侦听器的端口;Solr 的经典默认端口为 8983。指定的端口 (SOLR_PORT) 还将用于确定停止端口。停止端口定义为 STOP_PORT=($SOLR_PORT-1000),JMX RMI 侦听端口定义为 RMI_PORT=($SOLR_PORT+10000)。例如,如果您设置 -p 8985,则 STOP_PORT=7985,RMI_PORT=18985。如果未指定此项,则将使用 8983

示例bin/solr start -p 8655

-s <dir>

可选

默认值:server/solr

设置 solr.solr.home 系统属性。Solr 将在此目录下创建核心目录。这允许您在同一主机上运行多个 Solr 实例,同时使用 -d 参数设置的相同服务器目录集。如果设置,则指定的目录应包含一个 solr.xml 文件,除非 solr.xml 存在于 Zookeeper 中。

在运行示例 (-e) 时将忽略此参数,因为 solr.solr.home 取决于运行哪个示例。

默认值为 server/solr。如果传递相对目录,则在尝试默认 server/<dir> 之前,将使用当前目录进行验证。

示例bin/solr start -s newHome

-t <dir>

可选

默认值:solr.solr.home

设置 solr.data.home 系统属性,其中 Solr 将索引数据存储在 <instance_dir>/data 子目录中。如果未设置,则 Solr 使用 solr.solr.home 进行配置和数据。

-v

可选

默认值:无

更详细。这将 Solr 中 Log4j 的日志记录级别从 INFO 更改为 DEBUG,与编辑 log4j2.xml 的效果相同。

示例bin/solr start -f -v

-q

可选

默认值:无

更安静。这将 Solr 中 Log4j 的日志记录级别从 INFO 更改为 WARN,与编辑 log4j2.xml 的效果相同。这在您希望将日志记录限制为警告和错误的生产环境中很有用。

示例bin/solr start -f -q

-V-verbose

可选

默认值:无

此脚本中的详细消息。

示例bin/solr start -V

-z <zkHost>-zkHost <zkHost>

可选

默认值:请参见说明

Zookeeper 连接字符串,此选项仅与 -c 选项一起使用,以在 SolrCloud 模式下启动 Solr。如果在 solr.in.sh/solr.in.cmd 中未指定 ZK_HOST 且未提供此选项,Solr 将启动嵌入式 ZooKeeper 实例并使用该实例进行 SolrCloud 操作。

如果您的 ZK 主机具有 chroot 路径,并且您希望自动创建它,请将 ZK_CREATE_CHROOT 环境变量设置为 true。

示例bin/solr start -c -z server1:2181,server2:2181

-force

可选

默认值:无

如果尝试以 root 用户身份启动 Solr,脚本将退出并发出警告,指出以“root”身份运行 Solr 可能导致问题。可以使用 -force 参数覆盖此警告。

示例sudo bin/solr start -force

为了强调默认设置如何工作,请花点时间了解以下命令是等效的

bin/solr start

bin/solr start -h localhost -p 8983 -d server -s solr -m 512m

如果默认设置符合您的需求,则在启动时不必定义所有选项。

设置 Java 系统属性

bin/solr 脚本会将以 -D 开头的任何其他参数传递给 JVM,这允许您设置任意 Java 系统属性。

例如,若要将自动软提交频率设置为 3 秒,您可以执行

bin/solr start -Dsolr.autoSoftCommit.maxTime=3000

Solr 还会将格式为 SOLR_FOO_BAR 的任何环境变量转换为系统属性 solr.foo.bar,从而可以通过环境注入大多数属性,例如

SOLR_LOG_LEVEL=debug bin/solr start

SOLR_OPTS 环境变量也可用于为 Solr 设置其他系统属性。

为了在运行除 start(例如 stopcreateauthstatusapi)之外的任何 Solr 实用程序时设置自定义系统属性,应使用 SOLR_TOOL_OPTS 环境变量。

SolrCloud 模式

-c-cloud 选项是等效的

bin/solr start -c

bin/solr start -cloud

如果您指定了 ZooKeeper 连接字符串,例如 -z 192.168.1.4:2181,那么 Solr 将连接到 ZooKeeper 并加入集群。

如果您已在 solr.in.sh/solr.in.cmd 中定义了 ZK_HOST(请参阅 xref:zookeeper-ensemble.adoc#updating-solr-include-files,更新 Solr Include 文件>>),则可以从所有 bin/solr 命令中省略 -z <zk 主机字符串>

在 SolrCloud 模式下启动 Solr 时,如果您没有在 solr.in.sh/solr.in.cmd 中定义 ZK_HOST,也没有指定 -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

在 SolrCloud 模式下启动时,交互式脚本会话将提示您选择要使用的配置集。

有关在 SolrCloud 模式下启动 Solr 的更多信息,另请参阅部分 SolrCloud 入门

使用示例配置运行

bin/solr start -e <name>

示例配置使您可以使用反映您希望使用 Solr 完成的目标的配置快速入门。

每个示例都会使用托管模式启动 Solr,这允许使用 模式 API 进行模式编辑,但不允许手动编辑模式文件。

如果您希望直接手动修改 schema.xml 文件,则可以按照部分 模式工厂配置 中的说明更改此默认设置。

除非在以下说明中另有说明,否则这些示例不会启用 SolrCloud 也不启用 无模式模式

提供以下示例

  • cloud:此示例在单台计算机上启动 1-4 节点 SolrCloud 集群。选择后,将启动一个交互式会话,指导您完成选项,以选择要使用的初始配置集、示例集群的节点数、要使用的端口以及要创建的集合的名称。

    使用此示例时,您可以从 $SOLR_TIP/server/solr/configsets 中找到的任何可用配置集中进行选择。

  • techproducts:此示例启动一个单节点 Solr 实例,其模式专为 $SOLR_HOME/example/exampledocs 目录中包含的示例文档而设计。

    可以在 $SOLR_TIP/server/solr/configsets/sample_techproducts_configs 中找到使用的配置集。

    可以在 $SOLR_HOME/example/exampledocs/ 中找到使用的数据。

  • 无模式:此示例使用托管模式启动单节点 Solr 实例,如 模式工厂配置 部分所述,并提供一个非常基本的预定义模式。Solr 将在此配置中以 无模式 运行,其中 Solr 将动态创建模式中的字段,并猜测传入文档中使用的字段类型。

    使用的配置集可以在 $SOLR_TIP/server/solr/configsets/_default 中找到。

  • 影片:此示例使用托管模式启动单节点 Solr 实例,如 模式工厂配置 部分所述,然后使用模式 API 创建一些自定义字段。Solr 将在此配置中以 无模式 运行,其中 Solr 将动态创建模式中的字段,并猜测传入文档中使用的字段类型。然后它加载一些示例影片数据。

    使用的配置集可以在 $SOLR_TIP/server/solr/configsets/_default 中找到。

    使用的影片数据可以在 $SOLR_HOME/example/films/films.json 中找到。

前台运行选项 (-f) 与 -e 选项不兼容,因为脚本需要在启动 Solr 服务器后执行其他任务。

停止

stop 命令向正在运行的 Solr 节点发送 STOP 请求,使其可以正常关闭。该命令将等待 Solr 最多 180 秒正常停止,然后强制终止进程 (kill -9)。

bin/solr stop [选项]

bin/solr stop -help

停止参数

-p <port>

可选

默认值:无

停止在指定端口上运行的 Solr。如果您正在运行多个实例,或正在以 SolrCloud 模式运行,则需要在单独的请求中指定端口或使用 -all 选项。

示例bin/solr stop -p 8983

-all

可选

默认值:无

在此主机上查找并停止所有具有有效 PID 的正在运行的 Solr 服务器。

示例bin/solr stop -all

-k <key>

可选

默认值:无

停止密钥,用于防止意外停止 Solr;默认值为“solrrocks”。

示例bin/solr stop -k solrrocks

-V-verbose

可选

默认值:无

使用此脚本中的详细消息停止 Solr。

示例bin/solr stop -V

系统信息

版本

version 命令仅返回当前安装的 Solr 版本,然后立即退出。

$ bin/solr version
X.Y.0

状态

status 命令显示所有本地运行的 Solr 服务器的基本 JSON 格式状态信息。

status 命令使用 SOLR_PID_DIR 环境变量来找到 Solr 进程 ID 文件,以查找正在运行的 Solr 实例,其默认值为 bin 目录。

bin/solr status

输出将包括集群中每个节点的状态,如下例所示

Found 2 Solr nodes:

Solr process 39920 running on port 7574
{
  "solr_home":"/Applications/Solr/example/cloud/node2/solr/",
  "version":"X.Y.0",
  "startTime":"2015-02-10T17:19:54.739Z",
  "uptime":"1 days, 23 hours, 55 minutes, 48 seconds",
  "memory":"77.2 MB (%15.7) of 490.7 MB",
  "cloud":{
    "ZooKeeper":"localhost:9865",
    "liveNodes":"2",
    "collections":"2"}}

Solr process 39827 running on port 8865
{
  "solr_home":"/Applications/Solr/example/cloud/node1/solr/",
  "version":"X.Y.0",
  "startTime":"2015-02-10T17:19:49.057Z",
  "uptime":"1 days, 23 hours, 55 minutes, 54 seconds",
  "memory":"94.2 MB (%19.2) of 490.7 MB",
  "cloud":{
    "ZooKeeper":"localhost:9865",
    "liveNodes":"2",
    "collections":"2"}}

断言

assert 命令对 Solr 安装的常见问题进行健全性检查。这些检查包括检查特定目录的所有权/存在,并确保 Solr 在预期的 URL 上可用。该命令可以输出指定的错误消息,或更改其退出代码以指示错误。

例如

$ bin/solr assert --exists /opt/bin/solr

产生以下输出

ERROR: Directory /opt/bin/solr does not exist.

bin/solr assert 的基本用法是

$ bin/solr assert -h
usage: bin/solr assert [-m <message>] [-e] [-rR] [-s <url>] [-S <url>] [-c
                <url>] [-C <url>] [-u <dir>] [-x <dir>] [-X <dir>]
 -c,--cloud <url>              Asserts that Solr is running in cloud mode.
                               Also fails if Solr not running.  URL should
                               be for root Solr path.
 -C,--not-cloud <url>          Asserts that Solr is not running in cloud
                               mode.  Also fails if Solr not running.  URL
                               should be for root Solr path.
 -e,--exitcode                 Return an exit code instead of printing
                               error message on assert fail.
 -help                         Print this message
 -m,--message <message>        Exception message to be used in place of
                               the default error message.
 -R,--not-root                 Asserts that we are NOT the root user.
 -r,--root                     Asserts that we are the root user.
 -S,--not-started <url>        Asserts that Solr is NOT running on a
                               certain URL. Default timeout is 1000ms.
 -s,--started <url>            Asserts that Solr is running on a certain
                               URL. Default timeout is 1000ms.
 -t,--timeout <ms>             Timeout in ms for commands supporting a
                               timeout.
 -u,--same-user <directory>    Asserts that we run as same user that owns
                               <directory>.
 -verbose                      Enable more verbose command output.
 -x,--exists <directory>       Asserts that directory <directory> exists.
 -X,--not-exists <directory>   Asserts that directory <directory> does NOT
                               exist.

运行状况检查

当在 SolrCloud 模式下运行时,healthcheck 命令会为集合生成 JSON 格式的运行状况报告。运行状况报告提供有关集合中所有分片中每个副本状态的信息,包括已提交文档的数量及其当前状态。

bin/solr healthcheck [options]

bin/solr healthcheck -help

运行状况检查参数

-c <collection>

必需

默认值:无

要针对其运行运行状况检查的集合的名称。

示例bin/solr healthcheck -c gettingstarted

-solrUrl <url>

可选

默认值:无

基本 Solr URL,可以在 SolrCloud 模式下使用,以确定 ZooKeeper 连接字符串(如果不知道的话)。

-z <zkhost>-zkHost <zkhost>

可选

默认值:localhost:9983

ZooKeeper 连接字符串。如果您在 8983 端口以外的端口上运行 Solr,则必须指定 ZooKeeper 连接字符串。默认情况下,这将是 Solr 端口 + 1000。如果在 solr.in.shsolr.in.cmd 中定义了 ZK_HOST,则此参数是不必要的。

示例bin/solr healthcheck -z localhost:2181

下面是一个运行状况检查请求和响应的示例,其中使用了非标准的 ZooKeeper 连接字符串,并且运行了 2 个节点

$ bin/solr healthcheck -c gettingstarted -z localhost:9865

{
  "collection":"gettingstarted",
  "status":"healthy",
  "numDocs":0,
  "numShards":2,
  "shards":[
    {
      "shard":"shard1",
      "status":"healthy",
      "replicas":[
        {
          "name":"core_node1",
          "url":"http://10.0.1.10:8865/solr/gettingstarted_shard1_replica2/",
          "numDocs":0,
          "status":"active",
          "uptime":"2 days, 1 hours, 18 minutes, 48 seconds",
          "memory":"25.6 MB (%5.2) of 490.7 MB",
          "leader":true},
        {
          "name":"core_node4",
          "url":"http://10.0.1.10:7574/solr/gettingstarted_shard1_replica1/",
          "numDocs":0,
          "status":"active",
          "uptime":"2 days, 1 hours, 18 minutes, 42 seconds",
          "memory":"95.3 MB (%19.4) of 490.7 MB"}]},
    {
      "shard":"shard2",
      "status":"healthy",
      "replicas":[
        {
          "name":"core_node2",
          "url":"http://10.0.1.10:8865/solr/gettingstarted_shard2_replica2/",
          "numDocs":0,
          "status":"active",
          "uptime":"2 days, 1 hours, 18 minutes, 48 seconds",
          "memory":"25.8 MB (%5.3) of 490.7 MB"},
        {
          "name":"core_node3",
          "url":"http://10.0.1.10:7574/solr/gettingstarted_shard2_replica1/",
          "numDocs":0,
          "status":"active",
          "uptime":"2 days, 1 hours, 18 minutes, 42 seconds",
          "memory":"95.4 MB (%19.4) of 490.7 MB",
          "leader":true}]}]}

集合和核心

bin/solr 脚本还可以帮助你创建新的集合或核心,或删除集合或核心。

创建核心或集合

create 命令会根据 Solr 是在独立(核心)模式还是 SolrCloud 模式(集合)下运行来创建核心或集合。换句话说,此操作会检测 Solr 在哪种模式下运行,然后采取适当的操作(create_corecreate_collection)。

bin/solr create [选项]

bin/solr create -help

创建核心或集合参数

-c <name>

必需

默认值:无

要创建的核心或集合的名称。

示例bin/solr create -c mycollection

-d <confdir>

可选

默认值:_default

配置目录。

在 SolrCloud 模式下运行时,请参阅下面的 配置目录和 SolrCloud 部分以了解此选项的更多详细信息。

示例bin/solr create -d _default

-n <configName>

可选

默认值:请参见说明

配置名称。此名称默认为与核心或集合相同的名称。

示例bin/solr create -n basic

-p <port>-port <port>

可选

默认值:请参见说明

将创建命令发送到的本地 Solr 实例的端口。默认情况下,脚本会通过查找正在运行的 Solr 实例来尝试检测端口。

如果你在同一主机上运行多个 Solr 实例,因此需要具体说明要在哪个实例中创建核心,则此选项很有用。

示例bin/solr create -p 8983

-s <shards>-shards <shards>

可选

默认值:1

将集合拆分为的分片数。仅在 Solr 在 SolrCloud 模式下运行时适用。

示例bin/solr create -s 2

-rf <replicas>-replicationFactor <replicas>

可选

默认值:1

集合中每个文档的副本数。默认值为 1(无复制)。

示例bin/solr create -rf 2

-force

可选

默认值:无

如果尝试以“root”用户身份运行 create,脚本将退出并发出警告,提示以“root”身份运行 Solr 或对 Solr 执行操作可能会导致问题。可以使用 -force 参数覆盖此警告。

示例bin/solr create -c foo -force

创建集合

create_collection 命令创建集合,并且仅在以 SolrCloud 模式运行时可用。

bin/solr create_collection [选项]

bin/solr create_collection -help

创建集合参数

-c <name>

必需

默认值:无

要创建的集合的名称。

示例bin/solr create_collection -c mycollection

-d <confdir>

可选

默认值:_default

创建新集合时要复制的配置目录。

有关在 SolrCloud 模式下运行时此选项的更多详细信息,请参阅以下部分 配置目录和 SolrCloud,其中包括一些内置示例配置。

_default 也称为 无模式模式

示例bin/solr create_collection -d _default

或者,你可以传递到自己配置目录的路径,而不是使用其中一个内置配置。

示例bin/solr create_collection -c mycoll -d /tmp/myconfig

默认情况下,脚本将使用与集合 (-c) 选项相同的名称将指定的 confdir 目录上传到 Zookeeper。或者,如果你想重复使用现有目录或在 Zookeeper 中创建多个集合可以共享的 confdir,请使用 -n 选项

-n <configName>

可选

默认值:请参见说明

在 Zookeeper 中命名配置目录。默认情况下,将使用集合名称 (-c) 将配置上传到 Zookeeper,但是如果你想使用现有目录或覆盖 Zookeeper 中配置的名称,请使用 -c 选项。嗯嗯…​我从 bin/solr create_collection -h 输出中复制了上面的行,但我没有理解。并且 bin/solr create_collection -n basic -c mycoll 有效,它创建了一个 _default 的副本作为“basic”配置集…​嗯嗯?

示例bin/solr create_collection -n basic -c mycoll

-p <port>-port <port>

可选

默认值:请参见说明

要创建新集合的本地 Solr 实例的端口。如果未指定,脚本将搜索本地系统以查找正在运行的 Solr 实例,并将使用找到的第一个服务器的端口。

如果你在同一主机上运行多个 Solr 实例,因此需要具体说明要在哪个实例中创建核心,则此选项很有用。

示例bin/solr create -p 8983

-s <shards>-shards <shards>

可选

默认值:1

要将集合拆分为的分片数。

示例bin/solr create_collection -s 2

-rf <replicas>-replicationFactor <replicas>

可选

默认值:1

集合中每个文档的副本数。默认值为 1(无复制)。

示例bin/solr create_collection -rf 2

-force

可选

默认值:无

如果尝试以“root”用户身份运行 create,脚本将退出并发出警告,提示以“root”身份运行 Solr 或对 Solr 执行操作可能会导致问题。可以使用 -force 参数覆盖此警告。

示例bin/solr create_collection -c foo -force

创建核心

create_core 命令创建核心,并且仅在以用户管理(单节点)模式运行时可用。

bin/solr create_core [选项]

bin/solr create_core -help

创建核心参数

-c <name>

必需

默认值:无

要创建的核心名称。

示例bin/solr create -c mycore

-d <confdir>

可选

默认值:_default

创建新核心时要使用的配置目录。

示例bin/solr create -d _default

或者,你可以传递到自己配置目录的路径,而不是使用其中一个内置配置。

示例bin/solr create_collection -c mycore -d /tmp/myconfig

-p <port>-port <port>

可选

默认值:请参见说明

要创建新核心的本地 Solr 实例的端口。默认情况下,脚本会通过查找正在运行的 Solr 实例来尝试检测端口。

如果你在同一主机上运行多个 Solr 实例,因此需要具体说明要在哪个实例中创建核心,则此选项很有用。

示例bin/solr create -p 8983

-force

可选

默认值:无

如果尝试以“root”用户身份运行 create,脚本将退出并发出警告,提示以“root”身份运行 Solr 或对 Solr 执行操作可能会导致问题。可以使用 -force 参数覆盖此警告。

示例bin/solr create -c foo -force

配置目录和 SolrCloud

在 SolrCloud 中创建集合之前,必须将集合使用的配置目录上传到 ZooKeeper。createcreate_collection 命令支持集合和配置目录的工作方式的多种用例。你需要做出的主要决定是 ZooKeeper 中的配置目录是否应该在多个集合之间共享。

我们通过一些示例来说明配置目录在 SolrCloud 中的工作方式。

首先,如果你不提供 -d-n 选项,则默认配置 ($SOLR_TIP/server/solr/configsets/_default/conf) 将使用与集合相同的名称上传到 ZooKeeper。

例如,以下命令将导致 _default 配置上传到 ZooKeeper 中的 /configs/contactsbin/solr create -c contacts

如果你使用 bin/solr create -c contacts2 创建另一个集合,则 _default 目录的另一个副本将上传到 ZooKeeper 中的 /configs/contacts2

你对 contacts 集合的配置所做的任何更改都不会影响 contacts2 集合。简单来说,默认行为会为创建的每个集合创建一个配置目录的唯一副本。

你可以使用 -n 选项覆盖在 ZooKeeper 中给定配置目录的名称。例如,命令 bin/solr create -c logs -d _default -n basic 会将 server/solr/configsets/_default/conf 目录作为 /configs/basic 上传到 ZooKeeper。

请注意,我们使用 -d 选项指定了与默认值不同的配置。Solr 在 server/solr/configsets 下提供了几个内置配置。但是,你也可以使用 -d 选项提供你自己的配置目录的路径。例如,命令 bin/solr create -c mycoll -d /tmp/myconfigs 会将 /tmp/myconfigs 上传到 ZooKeeper 中的 /configs/mycoll 下。

重申一下,配置目录以集合命名,除非你使用 -n 选项覆盖它。

其他集合可以通过使用 -n 选项指定共享配置的名称来共享同一个配置。例如,以下命令将创建一个新集合,该集合共享之前创建的基本配置:bin/solr create -c logs2 -n basic

数据驱动架构和共享配置

_default 架构可以随着数据被索引而发生变化,因为它具有无模式功能(即,对架构的数据驱动更改)。因此,我们建议你不要在集合之间共享数据驱动配置,除非你确定所有集合都应该继承在其中一个集合中对数据进行索引时所做的更改。

你可以使用以下命令为集合关闭无模式功能,假设集合名称为 mycollection

$ bin/solr config -c mycollection -p 8983 -action set-user-property -property update.autoCreateFields -value false

另请参阅 设置或取消设置配置属性 一节。

删除内核或集合

delete 命令检测 Solr 正在运行的模式,然后根据需要删除指定的内核(用户管理或单节点)或集合(SolrCloud)。

bin/solr delete [options]

bin/solr delete -help

如果你正在 SolrCloud 模式下删除集合,则默认行为是同时从 Zookeeper 中删除配置目录,只要它没有被其他集合使用。

例如,如果你使用 bin/solr create -c contacts 创建了一个集合,那么删除命令 bin/solr delete -c contacts 将检查 /configs/contacts 配置目录是否被任何其他集合使用。如果不是,则会从 ZooKeeper 中删除 /configs/contacts 目录。你可以在运行此命令时传递 -deleteConfig false 来覆盖此行为。

删除内核或集合参数

-c <name>

必需

默认值:无

要删除的内核或集合的名称。

示例bin/solr delete -c mycoll

-deleteConfig

可选

默认值:true

是否也应从 ZooKeeper 中删除配置目录。

如果配置目录正在被其他集合使用,即使你将 -deleteConfig 传递为 true,它也不会被删除。

示例bin/solr delete -deleteConfig false

-p <port>-port <port>

可选

默认值:请参见说明

发送删除命令的本地 Solr 实例的端口。如果没有指定,脚本将在本地系统中搜索正在运行的 Solr 实例,并将使用第一个找到的服务器的端口。

如果你在同一主机上运行多个 Solr 实例,因此需要明确指定要从中删除核心的实例,此选项很有用。

示例bin/solr delete -p 8983

认证

bin/solr 脚本允许启用或禁用认证,使你可以从命令行配置认证。

目前,此命令仅在使用 SolrCloud 模式时可用,并且必须在托管 Solr 的机器上运行。

对于基本认证,脚本提供 用户角色和权限映射,并将创建的用户映射到 superadmin 角色。对于 Kerberos,它仅启用 security.json,不会设置任何用户或角色映射。

启用基本认证

命令 bin/solr auth enable 配置 Solr 在访问用户界面、使用 bin/solr 和任何 API 请求时使用基本认证。

有关 Solr 认证插件的更多信息,请参阅 保护 Solr 部分。有关基本认证支持的更多信息,请参阅 基本认证插件 部分。

bin/solr auth enable 命令进行多项更改以启用基本认证

  • 获取基本 security.json 文件,使用 auth 命令参数对其进行演化,并将新文件上传到 ZooKeeper。

  • bin/solr.in.shbin\solr.in.cmd 添加两行以设置认证类型和 basicAuth.conf 的路径

    # The following lines added by ./solr for enabling BasicAuth
    SOLR_AUTH_TYPE="basic"
    SOLR_AUTHENTICATION_OPTS="-Dsolr.httpclient.config=/path/to/solr-9.5.0/server/solr/basicAuth.conf"
  • 创建文件 server/solr/basicAuth.conf 以存储与 bin/solr 命令一起使用的凭据信息。

以下是一些示例用法

Usage: solr auth enable [-type basicAuth] -credentials user:pass [-blockUnknown <true|false>] [-updateIncludeFileOnly <true|false>] [-V]
       solr auth enable [-type basicAuth] -prompt <true|false> [-blockUnknown <true|false>] [-updateIncludeFileOnly <true|false>] [-V]
       solr auth enable -type kerberos -config "<kerberos configs>" [-updateIncludeFileOnly <true|false>] [-V]
       solr auth disable [-updateIncludeFileOnly <true|false>] [-V]

该命令采用以下参数

-credentials <user:pass>

可选

默认值:无

初始用户的用户名和密码,格式为 username:password。仅适用于 basicAuth。

如果你不想将用户名和密码作为参数传递给脚本,可以选择 -prompt 选项。必须指定 -credentials-prompt

-prompt <true|false>

可选

默认值:无

提示用户提供凭据。如果首选提示,请将 true 作为参数传递,以请求脚本提示用户输入用户名和密码。

必须指定 -credentials-prompt

-blockUnknown <true|false>

可选

默认值:true

true 时,这会阻止未经身份验证的用户访问 Solr。当 false 时,未经身份验证的用户仍能够访问 Solr,但仅限于授权插件配置中明确不需要用户角色的操作。

-solrIncludeFile <includeFilePath>

可选

默认值:无

指定环境中包含文件的完整路径。如果未指定,此脚本会查找名为 solr.in.sh 的包含文件来设置环境变量。具体来说,会按以下顺序搜索以下位置

  • <script location>/.

  • $HOME/.solr.in.sh

  • /usr/share/solr

  • /usr/local/share/solr

  • /etc/default

  • /var/solr

  • /opt/solr

-updateIncludeFileOnly <true|false>

可选

默认值:false

true 时,仅更新 bin/solr.in.shbin\solr.in.cmd,并跳过实际启用/禁用身份验证(即,不更新 security.json)。

-z <zkHost>-zkHost <zkHost>

可选

默认值:无

定义 ZooKeeper 连接字符串。这在所有 Solr 节点启动之前启用身份验证时非常有用。如果在 solr.in.shsolr.in.cmd 中定义了 ZK_HOST,则不需要。

-d <dir>

可选

默认值:$SOLR_TIP/server

定义 Solr 服务器目录,默认值为 $SOLR_TIP/server。通常不需要覆盖默认值,仅当您自定义了 $SOLR_HOME 目录路径时才需要。

-s <dir>-solr.home <dir>

可选

默认值:server/solr

定义 solr.solr.home 的位置,默认值为 server/solr。如果您在同一主机上有多个 Solr 实例,或者如果您自定义了 $SOLR_HOME 目录路径,则可能需要定义此项。这是放置任何凭据或身份验证配置文件(例如 basicAuth.conf)的位置。

禁用基本身份验证

您可以使用 bin/solr auth disable 禁用基本身份验证。

如果 -updateIncludeFileOnly 选项设置为 true,则仅更新 bin/solr.in.shbin\solr.in.cmd 中的设置,并且不会删除 security.json

如果 -updateIncludeFileOnly 选项设置为 false,则会更新 bin/solr.in.shbin\solr.in.cmd 中的设置,并且会删除 security.json。但是,任何选项都不会删除 basicAuth.conf 文件。

设置或取消设置配置属性

bin/solr 脚本启用 Config API 的子集:(未)设置通用属性(未)设置用户定义属性

bin/solr config [选项]

bin/solr config -help

设置或取消设置通用属性

要在集合 mycollection 上将通用属性 updateHandler.autoCommit.maxDocs 设置为 100

bin/solr config -c mycollection -p 8983 -action set-property -property updateHandler.autoCommit.maxDocs -value 100

默认的 -actionset-property,因此可以通过不提及它来缩短上述内容

bin/solr config -c mycollection -p 8983 -property updateHandler.autoCommit.maxDocs -value 100

要取消设置先前设置的通用属性,请指定 -action unset-property,而不要指定 -value

bin/solr config -c mycollection -p 8983 -action unset-property -property updateHandler.autoCommit.maxDocs

配置参数

-c <name>-collection <name>

必需

默认值:无

要更改其配置的核心或集合的名称。

-action <name>

可选

默认值:set-property

Config API 操作,其中之一:set-propertyunset-propertyset-user-propertyunset-user-property

-property <name>

必需

默认值:无

要对其实施操作的 Config API 属性的名称,例如:'updateHandler.autoSoftCommit.maxTime'。

-value <new-value>

可选

默认值:无

将属性设置为该值;接受 JSON 对象和字符串。

-z <zkHost>-zkHost <zkHost>

可选

默认值:localhost:9983

ZooKeeper 连接字符串,可在 SolrCloud 模式中使用。如果在 solr.in.sh 或 solr.in.cmd 中定义了 ZK_HOST,则不需要。

-p <port>-port <port>

可选

默认值:无

应用配置更改时要使用的 Solr 节点的 localhost 端口。

-solrUrl <url>

可选

默认值:http://localhost:8983/solr

基本 Solr URL,可以在 SolrCloud 模式下使用,以确定 ZooKeeper 连接字符串(如果不知道的话)。

-s <scheme>-scheme <scheme>

可选

默认值:http

访问 Solr 的方案。接受的值:http 或 https。默认值为“http”

ZooKeeper 操作

bin/solr 脚本允许执行某些影响 ZooKeeper 的操作。这些操作仅适用于 SolrCloud 模式。

这些操作可用作子命令,每个子命令都有自己的一组选项。

bin/solr zk [子命令] [选项]

bin/solr zk -help

bin/solr zk 的基本用法是

$ bin/solr zk -h
Usage: solr zk upconfig|downconfig -d <confdir> -n <configName> [-z zkHost]
         solr zk cp [-r] <src> <dest> [-z zkHost]
         solr zk rm [-r] <path> [-z zkHost]
         solr zk mv <src> <dest> [-z zkHost]
         solr zk ls [-r] <path> [-z zkHost]
         solr zk mkroot <path> [-z zkHost]
在发出这些命令以使用 Solr 预期的 znode 初始化 ZooKeeper 之前,Solr 应该至少启动过一次。一旦 ZooKeeper 初始化,Solr 无需在任何节点上运行即可使用这些命令。

上传配置集

使用 zk upconfig 命令将预先配置的配置集或自定义配置集上传到 ZooKeeper。

ZK 上传参数

以下所有参数都是必需的。

-n <name>

必需

默认值:无

ZooKeeper 中配置集的名称。此命令会将配置集上传到“configs”ZooKeeper 节点,并为其指定名称。

您可以在 Cloud 屏幕中通过 Admin UI 查看所有已上传的配置集。选择 Cloud → Tree → configs 以查看它们。

如果指定了预先存在的配置集,它将在 ZooKeeper 中被覆盖。

示例-n myconfig

-d <configset dir>

必需

默认值:无

要上传的配置集的本地目录。它应该有一个 conf 目录,该目录下直接包含 solrconfig.xml 等。

如果只提供了一个名称,则会检查 $SOLR_TIP/server/solr/configsets 是否有此名称。也可以提供绝对路径。

示例:

  • -d directory_under_configsets

  • -d /path/to/configset/source

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在 `solr.in.sh` 或 `solr.in.cmd` 中定义了 `ZK_HOST`,则不需要此字符串。

示例-z 123.321.23.43:2181

包含所有参数的此命令示例为

bin/solr zk upconfig -z 111.222.333.444:2181 -n mynewconfig -d /path/to/configset
更改配置时重新加载集合

此命令不会自动使更改生效!它只是将配置集上传到 ZooKeeper。您可以使用集合 API 的 RELOAD 命令 重新加载使用此配置集的任何集合。

下载配置集

使用 `zk downconfig` 命令从 ZooKeeper 下载配置集到本地文件系统。

ZK 下载参数

下面列出的所有参数都是必需的。

-n <name>

必需

默认值:无

要从 ZooKeeper 下载的配置集名称。Admin UI Cloud → Tree → configs 节点列出了所有可用的配置集。

示例-n myconfig

-d <configset dir>

必需

默认值:无

写入下载的配置集的路径。如果只提供一个名称,则 `$SOLR_TIP/server/solr/configsets` 将作为父级。也可以提供绝对路径。

在任何一种情况下,目标位置的现有配置都将被覆盖

示例:

  • -d directory_under_configsets

  • -d /path/to/configset/destination

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在 `solr.in.sh` 或 `solr.in.cmd` 中定义了 `ZK_HOST`,则不需要此字符串。

示例-z 123.321.23.43:2181

包含所有参数的此命令示例为

bin/solr zk downconfig -z 111.222.333.444:2181 -n mynewconfig -d /path/to/configset

最佳做法是将您的配置集作为记录系统保存在某种形式的版本控制中。在这种情况下,很少需要使用 `downconfig`。

在本地文件和 ZooKeeper znode 之间复制

使用 `zk cp` 命令在 ZooKeeper znode 和本地驱动器之间传输文件和目录。此命令将从本地驱动器复制到 ZooKeeper,从 ZooKeeper 复制到本地驱动器,或从 ZooKeeper 复制到 ZooKeeper。

ZK 复制参数

-r

可选

默认值:无

递归地将 <src> 复制到 <dst>。如果 <src> 有子项且未指定 -r,则命令将失败。

示例-r

<src>

必需

默认值:无

要从中复制的文件或路径。如果以 zk: 为前缀,则假定源为 ZooKeeper。如果没有前缀或前缀为 file:,则假定为本地驱动器。<src><dest> 中至少一个必须以 zk: 为前缀,否则命令将失败。

示例:

  • zk:/configs/myconfigs/solrconfig.xml

  • file:/Users/apache/configs/src

<dest>

必需

默认值:无

要复制到的文件或路径。如果以zk:为前缀,则假定源是 ZooKeeper。如果没有前缀或前缀是file:,则假定是本地驱动器。

<src><dest>中至少一个必须以zk:为前缀,否则命令将失败。如果<dest>以斜杠字符结尾,则它命名一个目录。

示例:

  • zk:/configs/myconfigs/solrconfig.xml

  • file:/Users/apache/configs/src

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在solr.in.shsolr.in.cmd中定义了ZK_HOST,则可选。

示例-z 123.321.23.43:2181

<src>是 zk 资源时,<dest>可以是“.”。如果<dest>以“/”结尾,则<dest>将是本地文件夹或父 znode,并且会追加<src>路径的最后一个元素,除非<src>也以斜杠结尾。<dest>可以是zk:,这在使用cp -r格式备份/恢复整个 zk 状态时可能很有用。你必须用引号将以通配符结尾的本地路径括起来,或仅在本地路径中以斜杠结尾。也就是说,bin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181等效于bin/solr zk cp -r "/some/dir/" zk:/ -z localhost:2181,但bin/solr zk cp -r /some/dir/\ zk:/ -z localhost:2181将引发错误。

以下是 ZK 配置的备份/恢复示例

复制到本地bin/solr zk cp -r zk:/ /some/dir -z localhost:2181

恢复到 ZKbin/solr zk cp -r /some/dir/ zk:/ -z localhost:2181

file:前缀被剥离,因此file:/wherever指定绝对本地路径,file:somewhere指定相对本地路径。Zookeeper 上的所有路径都是绝对路径。

Zookeeper 节点可以具有数据,因此将单个文件移动到父 znode 会将数据覆盖到父 Znode 上,因此指定尾随斜杠可能很重要。

从本地复制时支持尾随通配符,并且必须用引号引起来。

其他示例是

从本地递归复制目录到 ZooKeeperbin/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

从 ZooKeeper 中删除 znode

使用zk rm命令从 ZooKeeper 中删除 znode(以及所有子节点,如果需要)。

ZK 删除参数

-r

可选

默认值:无

如果<path>是目录,则递归删除。如果<path>有子项且未指定-r,则命令将失败。

示例-r

<path>

必需

默认值:无

从 ZooKeeper 中移除的路径,可以是父节点或叶节点。

安全检查有限,您无法移除//zookeeper节点。

该路径假定为 ZooKeeper 节点,不需要zk:前缀。

示例:

  • /configs

  • /configs/myconfigset

  • /configs/myconfigset/solrconfig.xml

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在solr.in.shsolr.in.cmd中定义了ZK_HOST,则可选。

示例-z 123.321.23.43:2181

带有参数的此命令的示例为

bin/solr zk rm -r /configs

bin/solr zk rm /configs/myconfigset/schema.xml

将一个 ZooKeeper znode 移动到另一个(重命名)

使用zk mv命令移动(重命名)ZooKeeper znode。

ZK 移动参数

<src>

必需

默认值:无

要重命名的 znode。假定有zk:前缀。

示例/configs/oldconfigset

<dest>

必需

默认值:无

znode 的新名称。假定有zk:前缀。

示例/configs/newconfigset

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在 `solr.in.sh` 或 `solr.in.cmd` 中定义了 `ZK_HOST`,则不需要此字符串。

示例-z 123.321.23.43:2181

此命令的示例为

bin/solr zk mv /configs/oldconfigset /configs/newconfigset

列出 ZooKeeper znode 的子项

使用zk ls命令查看 znode 的子项。

ZK 列表参数

-r

可选

默认值:无

递归列出 znode 的所有后代。仅列出节点名称,不列出数据。

示例-r

<path>

必需

默认值:无

要在 ZooKeeper 上列出的路径。

示例/collections/mycollection

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在solr.in.shsolr.in.cmd中定义了ZK_HOST,则可选。

示例-z 123.321.23.43:2181

带有参数的此命令的示例为

bin/solr zk ls -r /collections/mycollection

bin/solr zk ls /collections

创建 znode(支持 chroot)

使用zk mkroot命令创建没有数据的 znode。此命令的主要用例是支持 ZooKeeper 的“chroot”概念。但是,它也可以用于创建任意路径。

创建 znode 参数

<path>

必需

默认值:无

要在 ZooKeeper 上创建的路径。如果需要,将创建中间 znode。如果不存在,则假定有前导斜杠。

示例/solr

-z <zkHost>

必需

默认值:无

ZooKeeper 连接字符串。如果在solr.in.shsolr.in.cmd中定义了ZK_HOST,则可选。

示例-z 123.321.23.43:2181

此命令的示例

bin/solr zk mkroot /solr -z 123.321.23.43:2181

bin/solr zk mkroot /solr/production

导出和导入

将文档导出到文件

export命令允许您以 JSON、带行 JSON 或 Javabin 格式从集合中导出文档。可以导出所有文档,也可以仅导出与查询匹配的文档。

这尚未在嵌套子文档中进行测试,您的结果会有所不同。
export命令仅适用于在云模式下运行的 Solr。

bin/solr export [options]

bin/solr export -help

bin/solr export命令采用以下参数

-url <url>

必需

默认值:无

到集合的完全限定地址。

-format <format>

可选

默认值:json

导出的文件格式,jsonjsonljavabin。选择 javabin 以原生 Solr 格式导出,这种格式紧凑且导入速度快。jsonl 是 Json with Lines 格式,了解更多信息,请访问 https://jsonlines.org/

-out <path>

可选

默认值:请参见说明

导出数据的目录路径或要写出的特定文件。

如果只指定了一个目录,则将使用集合的名称创建文件,如 <collection>.json

-compress

可选

默认值:false

如果指定了 -compress,则将对导出的输出文件进行 gzip 压缩,例如 <collection>.json.gz

-query <query string>

可选

默认值:*:*

自定义查询。默认值为 *:*,将导出所有文档。

-fields <fields>

可选

默认值:无

要导出的字段的逗号分隔列表。默认情况下,将获取所有字段。

-limit <number of documents>

可选

默认值:100

要下载的最大文档数。值为 -1 将导出所有文档。

示例

从集合 gettingstarted 导出所有文档

bin/solr export -url http://localhost:8983/solr/gettingstarted limit -1

将集合 gettingstarted 的所有文档导出到名为 1MDocs.json.gz 的文件,作为压缩的 JSON 文件

bin/solr export -url http://localhost:8983/solr/gettingstarted -1 -format json -compress -out 1MDocs

将文档导入集合

将文档导出到文件后,可以使用 /update 请求处理程序 将其导入新的 Solr 集合。

示例:导入 json 文件

首先导出文档,确保忽略通过 copyField 填充的任何字段,方法是指定要导出的字段

$ bin/solr export -url http://localhost:8983/solr/gettingstarted -fields id,name,manu,cat,features

创建一个新集合,将导出的文档导入其中

$ bin/solr create_collection -c test_collection -n techproducts

现在使用以下任一方法导入数据

$ curl -X POST -d @gettingstarted.json 'http://localhost:8983/solr/test_collection/update/json/docs?commit=true'

$ curl -H 'Content-Type: application/json' -X POST -d @gettingstarted.json 'http://localhost:8983/solr/test_collection/update?commit=true'

示例:导入 javabin 文件

$ bin/solr export -url http://localhost:8983/solr/gettingstarted -format javabin -fields id,name,manu,cat,features
$ curl -X POST --header "Content-Type: application/javabin" --data-binary @gettingstarted.javabin 'http://localhost:8983/solr/test_collection/update?commit=true'

与 API 交互

api 命令允许您向 Solr API 端点发送任意 HTTP 请求。

bin/solr api -help

bin/solr api 命令采用以下参数

-get <url>

必需

默认值:无

向 Solr API 端点发送 GET 请求。

API

api 命令允许您向 Solr API 端点发送任意 HTTP 请求。如果您已使用 Solr 配置了 basicAuth 或 TLS,您可能会发现这比使用 curl 等单独工具更容易。

$ bin/solr api api -get http://localhost:8983/solr/techproducts/select?q=*:*

以下是如何向 techproducts /sql 端点发送 SQL 查询的示例(假设您已在启用 SQL 模块的情况下以 Cloud 模式启动了 Solr)

$ bin/solr api api -get http://localhost:8983/solr/techproducts/sql?stmt=select+id+from+techproducts+limit+10

结果会流式传输到终端。