Sphinx 相关收藏

来源:互联网 发布:淘宝付费推广站长 编辑:程序博客网 时间:2024/05/16 09:41

Sphinx/searchd命令参考

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启动成普通服务模式

参考来源

  • http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html#required-tools


Sphinx/search命令参考

search是Sphinx中的一个辅助工具。searchd负责服务器类环境中的搜索,而search专注于在命令行上对索引进行快速测试,而不需要构建一个复杂的架构来处理到服务器端的连接和处理服务器返回的响应。

注意:search并不是设计用来做为客户端应用程序的一部分。我们强烈建议用户不要针对search编写接口,相反,应该针对searchd。Sphinx提供的任何客户端API也都不支持这种用法。(任何时候search总是每次都重新调入索引,而searchd会把索引缓冲在内存中以利性能)。

澄清了这些我们就可以继续了。很多通过API构造的查询也可以用search来做到,然而对于非常复杂的查询,可能还是用个小脚本和对应的API调用来实现比较简单。除此之外,可能有些新的特性先在searchd系统中实现了而尚未引入到search中。

search 的调用语法如下:

search [OPTIONS] word1 [word2 [word3 [...]]]

调用search并不要求searchd正在运行,只需运行search的账户对配置文件和索引文件及其所在路径有读权限即可。

默认行为是对在配置文件中设置的全部索引的全部字段搜索word1(AND word2 AND word3….)。如果用API调用来构建这个搜索,那相当于向SetMatchMode传递参数SPH_MATCH_ALL,然后在调用Query的时候指定要查询的索引是*。

search有很多选项。通用的选项

  • --config <file> (可简写为 -c <file> ) 使search使用指定的配置文件,这与上述indexer的对应选项相同。
  • --index <index> (可简写为 -i <index> ) 使search仅搜索指定的索引。通常它会尝试搜索sphinx.conf中列出的全部物理索引,不包括分布式索引。
  • --stdin 使search接受标准输入(STDIN)上传入的查询,而不是命令行上给出的查询。有时你要用脚本通过管道给search传入查询,这正是这个选项的用武之地。

设置匹配方式的选项

  • --any (可简写为 -a) 更改匹配模式,匹配指定的任意一个词(word1 OR word2 OR word3),这对应API调用中向SetMatchMode传递参数SPH_MATCH_ANY。
  • --phrase (可简写为 -p ) 更改匹配模式,将指定的全部词做为一个词组(不包括标点符号)构成查询,这对应API调用中向SetMatchMode传递参数SPH_MATCH_PHRASE。
  • --boolean (可简写为-b ) 将匹配模式设为 Boolean matching。注意如果在命令行上使用布尔语法,可能需要对某些符号(用反斜线“\”)加以转义,以避免外壳程序(shell)或命令行处理器对这些符号做特殊理解,例如,在Unix/Linux系统上必须转义“&”以防止search被fork成一个后台进程,尽管这个问题也可以像下文一样通过使用--stdin选项来解决。这个选项对应API调用中向SetMatchMode传递参数SPH_MATCH_BOOLEAN。
  • --ext (可简写为 -e ) 将匹配模式设为Extended matching。这对应与API调用中向SetMatchMode传递参数SPH_MATCH_EXTENDED。要注意的是因为已经有了更好的扩展匹配模式版本2,所以并不鼓励使用这个选项,见下一条说明。
  • --ext2 (可简写为 -e2 ) 将匹配模式设为 Extended matching, version 2。这个选项对应在API调用中向SetMatchMode传递参数SPH_MATCH_EXTENDED2。要注意这个选项相比老的扩展匹配模式更有效也提供更多的特性,因此推荐使用这个新版的选项。
  • --filter <attr> <v> (可简写为 -f <attr> <v> ) 对结果进行过滤,只有指定的属性attr匹配指定的值v时才能通过过滤。例如--filter deleted 0 只匹配那些有deleted属性,并且其值是0的文档。也可以在命令行上多次给出--filter以便指定多重过滤,但是如果重复定义针对同一个属性的过滤器,那么第二次指定的过滤条件会覆盖第一次的。

用于处理搜索结果的选项

  • --limit <count> (可简写为 -l count ) 限制返回的最多匹配结果数。如果指定了分组(group)选项,则表示的是返回的最多匹配组数。默认值是20个结果(与API相同)
  • --offset <count> (可简写为 -o <count> ) 从第count个结果开始返回,用于给搜索结果分页。如果想要每页20个结果,那么第二页就从偏移量20开始,第三页从偏移量40开始,以此类推。
  • --group <attr> (可简写为-g <attr> ) 搜索结果按照指定的属性attr进行分组。类似SQL中的GROUP BY子句,这会将attr属性值一致的结果结合在一起,返回的结果集中的每条都是一组中最好的那条结果。如果没有特别指定,那“最好”指的是相关度最大的。
  • --groupsort <expr> (可简写为 -gs <expr> ) 尽搜索结果根据-group分组后,再用表达式<expr>的值决定分组的顺序。注意,这个选项指定的不是各组内部哪条结果是最好的,而是分组本身返回的顺序。
  • --sortby <clause> (可简写为 -s <clause> ) 指定结果按照<clause>中指定的顺序排序。这使用户可以控制搜索结果展现时的顺序,即根据不同的列排序。例如,--sortby "@weight DESC entrytime DESC" 的意思是将结果首先按权值(相关度)排序,如果有两条或以上结果的相关度相同,则他们的顺序由时间值entrytime决定,时间最近(值最大)的排在前面。通常需要将这些项目放在引号里(--sortby "@weight DESC")或者用逗号隔开(--sortby @weight,DESC),以避免它们被分开处理。另外,与通常的排序模式相同,如果指定了--group(分组),这个选项就影响分组内部的结果如何排序。
  • --sortexpr expr (可简写为 -S expr ) 搜索结果展现的顺序由指定的算术表达式expr决定。例如: --sortexpr "@weight + ( user_karma + ln(pageviews) )*0.1"(再次提示,要用引号来避免shell对星号*做特殊处理)。扩展排序模式在Sorting modes 一章下的SPH_SORT_EXTENDED条目下具体讨论。
  • --sort=date 搜索结果按日期升序(日期较久远的在前)排列。要求索引中有一个属性被指定为时间戳。要求索引中有一个属性被指定为时间戳。
  • --rsort=date specifies that the results should be sorted by ascending (i.e. oldest first) date. This requires that there is an attribute in the index that is set as a timestamp.
  • --sort=ts 搜索结果按时间戳分成组。先返回时间戳在最近一小时内的这组结果,在组内部按相关度排序。其后返回时间戳为最近一天之内的结果,也按相关度排序。再之后是最近一周的,最后是最近一个月的。在Sorting modes 一章的SPH_SORT_TIME_SEGMENTS 条目下对此有更详细的讨论。

其他选项

  • --noinfo (可简写为-q ) 令search不在SQL数据库中查询文档信息(Document Info)。具体地说,为了调试search和MySQL共同使用时出现的问题,你可以在使用这个选项的同时提供一个根据文档ID搜索整个文章全文的查询。细节可参考sql_query_info指令。

参考来源

  • http://www.coreseek.cn/docs/coreseek_3.2-sphinx_0.9.9.html#required-tools