indexer: 收集要被检索的数据
indexer [OPTIONS] [indexname1 [indexname2 […]]]
用户可以在sphinx.conf中设置好可能有哪些索引(index),因此在调用indexer的时候,最简单的情况下,只需要告诉它你要简历哪个(或者哪些)索引就行了。
假设 sphinx.conf 包含了两个索引的具体设置, sph_yd 和 sph_yd_delta, ,你可以这么调用: $ indexer mybigindex 或 $ indexer mysmallindex mybigindex 或全部索引 $ indexer —all
在配置文件sphinx.conf里面,可以为数据指定一个或多个索引。然后调用indexer来对其中一个特定的索引进行重新编制索引操作,或者是重新编制所有索引——不限于某一个或同时全部,用户总是可以指定现有索引的一个组合。
–config <file> (简写为-c <file>) 使 indexer 将指定的文件file作为配置文件。 默认indexer是会在安装目录(例如e.g. /usr/local/sphinx/etc/sphinx.conf ,如果sphinx被安装在 /usr/local/sphinx)中寻找sphinx.conf,若找不到,则继续在用户在shell中调用indexer时所在的目录中寻找。创建自己的sphinx.conf文件,然后把它做为参数传给indexer。例如:$ indexer –config /home/myuser/sphinx.conf myindex –all 使indexer对sphinx.conf文件中列出的所有索引进行重新编制索引,这样就不必一次列出每个索引的名字了。 $ indexer –config /home/myuser/sphinx.conf –all –rotate 用于轮换索引。对新的文档建立索引时几乎肯定都确保搜索服务仍然可用,除非你有信心在搜索服务停止同时不给你的用户带来困扰。–rotate建立一个额外的索引,并列于原有索引(与原有索引在相同目录,简单地在原有索引文件名基础上加一个.new后缀)。一旦这个额外的索引建立完成,indexer给searchd发一个SIGHUP信号做为通知。searchd会尝试将索引重新命名(给原有索引加上.old后缀,而把带有.new后缀的新索引改为原名,以达替换之目的),继而用新的文件重启服务。依 seamless_rotate 选项设定之不同,在新索引可用之前可能有一点小的延迟。用法示例:$ indexer –rotate –all –quiet 使indexer不输出除错误(error)外的任何东西。 $ indexer –rotate –all –quiet –noPRogress 不随时显示进度信息 $ indexer –rotate –all –noprogress –buildstops <outputfile.text> <N> 像建立索引一样扫描索引对应的数据源,产生一个最终会被加入索引的词项的列表。换种说法,产生一个用这个索引可以检索的词项的列表。注意,这个选项使indexer并不真正更新指定的索引,而只是“假装”建在立索引似地处理一遍数据,包括运行sql_query_pre或者sql_query_post选项指定的查询。outputfile.txt文 件最终会包含一个词表,每行一个词,按词频排序,高频在前。参数N指定了列表中最多可出现的词项数目,如果N比索引中全部词项的数目还大,则返回的词项数 就是全部词项数。客户端应用程序利用这种字典式的词表来提供“您是要搜索。。。吗?(Did you mean…)”的功能,通常这个选项与下面要讲的–buildfreqs选项一同使用。示例: $ indexer myindex –buildstops Word_freq.txt 1000 这条命令在当前目录产生一个word_freq.txt文件,内含myindex这个索引中最常用的1000个词,且最常用的排在最前面。注意,当指定了多个索引名或使用了–all选项(相当于列出配置文件中的所有索引名)时,这个选项对其中的最后一个索引起作用。 –buildfreqs 与 –buildstops一同使用 (如果没有指定 –buildstops 则–buildfreqs也被忽略). 它给–buildstops产 生的词表的每项增加一个计数信息,即该词在索引中共出现了多少次,这在建立停用词(stop words,出现特别普遍的词)表时可能有用。在开发“您是要搜索。。。吗?(Did you mean…)”的功能时这个选项也能帮上忙,因为有了它你就能知道一个词比另一个相近的词出现得更频繁的程度。示例: $ indexer myindex –buildstops word_freq.txt 1000 –buildfreqs 这个命令将产生一个类似于上一条命令的word_freq.txt ,但不同在于,每个词的后面都会附加一个数字,指明在指定的索引中这个词出现了多少次。 –merge <dst-index> <src-index> 用于在物理上将多个索引合并,比方说你在使用“主索引+增量索引”模式,主索引很少改变,但增量索引很频繁地重建,而–merge选项允许将这两个索引合而为一。操作是从右向左进行的,即先考察src-index的内容,然后在物理上将之与dst-index合并,最后结果留在dst-index里。用伪代码说就是dst-index += src-index。示例: $ indexer –merge main delta –rotate 上例中main是主索引,很少更动,delta是增量索引,频繁更新。上述命令调用indexer将delta的内容合并到main里面并且对索引进行轮换。 –merge-dst-range <attr> <min> <max> 在合并索引的时候运行范围过滤。具体地说,向目标索引 (是 –merge 的一个参数,如果没有指定 –merge, 则–merge-dst-range 也被忽略)合并时,indexer会对将要合并进去的文档做一次过滤,只有通过过滤才能最终出现在目标索引中。举一个实用的例子,假设某个索引有一个“已删除(deleted)”属性,0代表“尚未删除”。这样一个索引可以用如下命令进行合并: $ indexer –merge main delta –merge-dst-range deleted 0 0 这样标记为已删除的文档(值为1)就不会出现在新生成的目标索引中了。这个选项可以在命令行上指定多次,以便指定多个相继的过滤,这样一个文档要想合并到最终的目标索引中去,就必须依次通过全部这些过滤。(PS:这个过滤只针对main索引,delta 索引中的数据不会去过滤,delta要过滤请在sql_query中做好过滤处理)
searchd是系统实际上处理搜索的组件,运行时它表现得就像一种服务,他与客户端应用程序调用的五花八门的API通讯,负责接受查询、处理查询和返回数据集。 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 myindexsearchd在Windows平台上有一些特有的选项,与它做为windows服务所产生的额外处理有关,这些选项只存在于Windows二进制版本。
新闻热点
疑难解答