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二進制版本。
新聞熱點
疑難解答