語句分析:
SHOW STATUS; 顯示一些很有用的性能計數器。僅當 searchd 啟動時帶有 --iostats 和 --cpustats 開關時,IO和CPU計數器才分別可用。
SHOW META; 顯示關於上一條查詢的一些額外的元信息(meta-information),比如查詢時間和關於關鍵詞的統計信息:
查詢工具分析:
indexer 命令參考
indexer 是Sphinx的兩個關鍵工具之一。不管是從命令行直接調用,還是作為一個較大的腳本的一部分使用, indexer 都只負責一件事情——收集要被檢索的數據。
indexer 的調用語法基本上是這樣:
indexer [OPTIONS] [indexname1 [indexname2 [...]]]
用戶可以在 sphinx.conf 中設置好可能有哪些索引(index)(這些索引可以在晚些時候別搜索),因此在調用 indexer 的時候,最簡單的情況下,只需要告訴它你要簡歷哪個(或者哪些)
索引就行了。
假設 sphinx.conf 包含了兩個索引的具體設置, mybigindex 和 mysmallindex , ,你可以這么調用:
$ indexer mybigindex $ indexer mysmallindex mybigindex
在配置文件 sphinx.conf 里面,用戶可以為他們的數據指定一個或多個索引。然后調用 indexer 來對其中一個特定的索引進行重新編制索引操作,或者是重新編制所有索引——不限於某一個或同時全部,用戶總是可以指定現有索引的一個組合。 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安裝的情況下使用,比如二進制文件安裝在 /usr/local/sphinx ,而不同用戶都有權定制自己的sphinx設置。或者在同一個服務器上運行多個實例的情況下使用。在上述兩中情況中,用戶可以創建自己的sphinx.conf 文件,然后把它做為參數傳給indexer。例如:
$ indexer --config /home/myuser/sphinx.conf myindex
- --all 使 indexer 對 sphinx.conf 文件中列出的所有索引進行重新編制索引,這樣就不比一次列出每個索引的名字了。這個選項在配置文件較小的情況下,或者在類似基於 cron 的維護工作中很有用。在上述情況中,整個索引集每天或每周或別的什么合適的時間間隔中就重新建立一次。用法示例:
$ indexer --config /home/myuser/sphinx.conf --all - --rotate 用於輪換索引。對新的文檔建立索引時幾乎肯定都確保搜索服務仍然可用,除非你有信心在搜索服務停止同時不給你的用戶帶來困擾。 --rotate 建立一個額外的索引,並列於原有索引(與原有索引在相同目錄,簡單地在原有索引文件名基礎上加一個 .new后綴)。一旦這個額外的索引建立完成, indexer 給 searchd 發一個SIGHUP信號做為通知。 searchd 會嘗試將索引重新命名(給原有索引加上 .old 后綴,而把帶有 .new 后綴的新索引改為原名,以達替換之目的),繼而用新的文件重啟服務。依 seamless_rotate 選項設定之不同,在新索引可用之前可能有一點小的延遲。用法示例:
$ indexer --rotate --all
- --quiet 使 indexer 不輸出除錯誤(error)外的任何東西。這個選項仍然拽可用在 cron 定時任務的情境下或者腳本中,這些情況下大部分輸出是無關緊要或完全沒用的,除非是發生了某些種類的錯誤。用法示例:
$ indexer --rotate --all --quiet
- --noprogress 不隨時顯示進度信息,而是僅在索引結束時報告最終的狀態細節(例如為哪些文檔建立了索引,建立索引的速度等)。當腳本沒有運行在一個控制台(console,
或“tty”)時,這個選項是默認的。用法示例:
$ 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)就不會出現在新生成的目標索引中了。這個選項可以在命令行上指定多次,以便指定多個相繼的過濾,這樣一個文檔要想合並到最終的目標索引中去,就必須依次通過全部這些過濾。
searchd 下篇更新