5.2.searchd命令参考
优质
小牛编辑
133浏览
2023-12-01
searchd
也是sphinx的两个关键工具之一。searchd
是系统实际上处理搜索的组件,运行时它表现得就像一种服务,他与客户端应用程序调用的五花八门的API通讯,负责接受查询、处理查询和返回数据集。
不同于indexer
,searchd
并不是设计用来在命令行或者一般的脚本中调用的, 相反,它或者做为一个守护程序(daemon)被init.d调用(在Unix/Linux类系统上),或者做为一种服务(在Windows类系统上), 因此并不是所有的命令行选项都总是有效,这与构建时的选项有关。
调用searchd
就像这么简单:
$ searchd [OPTIONS]
不管searchd
是如何构建的,下列选项总是可用:
--help
(可以简写为-h
) 列出可以在你当前的searchd
构建上调用的参数。--config <file>
(可简写为-c <file>
) 使searchd
使用指定的配置文件,与上述indexer
的--config
开关相同。--stop
用来停掉searchd
,使用sphinx.conf
中所指定的PID文件,因此您可能还需要用--config
选项来确认searchd
使用哪个配置文件。值得注意的是,调用--stop
会确保用UpdateAttributes()
对索引进行的更动会反应到实际的索引文件中去。示例:$ searchd --config /home/myuser/sphinx.conf --stop
--status
用来查询运行中的searchd
实例的状态,,使用指定的(也可以不指定,使用默认)配置文件中描述的连接参数。它通过配置好的第一个UNIX套接字或TCP端口与运行中的实例连接。一旦连接成功,它就查询一系列状态和性能计数器的值并把这些数据打印出来。在应用程序中,可以用Status()API调用来访问相同的这些计数器。示例:$ searchd --status $ searchd --config /home/myuser/sphinx.conf --status
--pidfile
用来显式指定一个PID文件。PID文件存储着关于searchd
的进程信息,这些信息用于进程间通讯(例如indexer
需要知道这个PID以便在轮换索引的时候与searchd
进行通讯)searchd
在正常模式运行时会使用一个PID(即不是使用--console选项启动的),但有可能存在searchd
在控制台(--console
)模式运行,而同时正在索引正在进行更新和轮换操作的情况,此时就需要一个PID文件。$ searchd --config /home/myuser/sphinx.conf --pidfile /home/myuser/sphinx.pid
--console
用来强制searchd
以控制台模式启动;典型情况下searchd
像一个传统的服务器应用程序那样运行,它把信息输出到(sphinx.conf
配 置文件中指定的)日志文件中。但有些时候需要调试配置文件或者守护程序本身的问题,或者诊断一些很难跟踪的问题,这时强制它把信息直接输出到调用他的控制 台或者命令行上会使调试工作容易些。同时,以控制台模式运行还意味着进程不会fork(因此搜索操作都是串行执行的),也不会写日志文件。(要特别注意,searchd
并不是被主要设计用来在控制台模式运行的)。可以这样调用searchd
:$ searchd --config /home/myuser/sphinx.conf --console
--iostats
当使用日志时(必须在sphinx.conf
中启用query_log
选项)启用--iostats
会对每条查询输出关于查询过程中发生的输入输出操作的详细信息,会带来轻微的性能代价,并且显然会导致更大的日志文件。更多细节请参考query log format一节。可以这样启动searchd
:$ searchd --config /home/myuser/sphinx.conf --iostats
--cpustats
使实际CPU时间报告(不光是实际度量时间(wall time))出现在查询日志文件(每条查询输出一次)和状态报告(累加之后)中。这个选项依赖clock_gettime()系统调用,因此可能在某些系统上不可用。可以这样启动searchd
:$ searchd --config /home/myuser/sphinx.conf --cpustats
--port portnumber
(可简写为-p
) 指定searchd
监听的端口,通常用于调试。这个选项的默认值是9312,但有时用户需要它运行在其他端口上。在这个命令行选项中指定端口比配置文件中做的任何设置优先级都高。有效的端口范围是0到65535,但要使用低于1024的端口号可能需要权限较高的账户。使用示例:$ searchd --port 9313
--index <index>
强制searchd
只提供针对指定索引的搜索服务。跟上面的--port
相同,这主要是用于调试,如果是长期使用,则应该写在配置文件中。使用示例:$ searchd --index myindex
searchd
在Windows平台上有一些特有的选项,与它做为windows服务所产生的额外处理有关,这些选项只存在于Windows二进制版本。
注意,在Windows上searchd默认以--console
模式运行,除非用户将它安装成一个服务。
--install
将searchd
安装成一个微软管理控制台(Microsoft Management Console, 控制面板 / 管理工具 / 服务)中的服务。如果一条命令指定了--install
,那么同时使用的其他所有选项,都会被保存下来,服务安装好后,每次启动都会调用这些命令。例如,调用searchd
时,我们很可能希望用--config
指定要使用的配置文件,那么在使用--install
的同时也要加入这个选项。一旦调用了这个选项,用户就可以在控制面板中的管理控制台中对searchd进行启动、停止等操作,因此一切可以开始、停止和重启服务的方法对searchd
也都有效。示例:C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install --config C:\Sphinx\sphinx.conf
如果每次启动searchd
你都希望得到I/O stat信息,那就应该把这个选项也用在调用--install
的命令行里:C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install --config C:\Sphinx\sphinx.conf --iostats
--delete
在微软管理控制台(Microsoft Management Console)和其他服务注册的地方删除searchd,当然之前要已经通过--install
安装过searchd
服务。注意,这个选项既不删除软件本身,也不删除任何索引文件。调用这个选项之后只是使软件提供的服务不能从windows的服务系统中调用,也不能在机器重启后自动启动了。如果调用时searchd
正在做为服务运行中,那么现有的示例并不会被结束(一直会运行到机器重启或调用--stop
)。如果服务安装时(用--servicename
)指定了自定义的名字,那在调用此选项卸载服务时里也需要用--servicename
指定相同的名字。示例:C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --delete
--servicename <name>
在安装或卸载服务时指定服务的名字,这个名字会出现在管理控制台中。有一个默认的名字searchd
,但若安装服务的系统可能有多个管理员登录,或同时运行多个searchd
实例,那么起一个描述性强的名字将是个好好主意。注意,只有在与--install
或者--delete
同时使用的时候--servicename
才有效,否则这个选项什么都不做。示例:C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install --config C:\Sphinx\sphinx.conf --servicename SphinxSearch
--ntservice
在Windows平台,管理控制台将searchd
做为服务调用时将这个选项传递给它。通常没有必要直接调用这个开关,它是为Windows系统准备的,当服务启动时,系统把这个参数传递给searchd
。然而理论上,你也可以用这个开关从命令行将searchd
启动成普通服务模式(与--console
代表的控制台模式相对)
最后但并非最不重要的,类似其他的守护进程(daemon),searchd
多种信号。
- SIGTERM
- 进行一次平滑的重启。新的请求不会被接受;但是已经开始的请求不会被强行中断。
- SIGHUP
- 启动索引轮询。取决于seamless_rotate的设置,新的请求可能会在短期内陷入停顿;客户端将接收到临时错误。
- SIGUSR1
- 强制重新打开searchd日志和查询日志,使得日志轮询可以进行。