search是sphinx中的一個輔助工具,searchd負責服務器類環境中的搜索,而search專一於在命令行上對索引進行快速測試,而不須要構建一個複雜的架構來除了到服務器端的鏈接和處理服務期返回的響應。 html
注意:serch並非設計用來做爲客戶端應用程序的一部分,強烈建議用戶不要針對search編寫藉口,相反,應該針對searchd。sphinx提供的任何客戶端API也都不支持這種用法。(任什麼時候候search老是每次都從新調入索引,而search會把索引緩衝在內存中以利性能)。 sql
不少新的特性先在searchd系統中實現了而還沒有引入到search中。 shell
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) 將匹配模式設爲 擴展比配, 版本 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對星號*作特殊處理)。擴展排序模式在排序模式 一章下的SPH_SORT_EXTENDED條目下具體討論。
- --sort=date 搜索結果按日期降序(日期最新的在前)排列。要求索引中有一個屬性被指定爲時間戳。
- --rsort=date 特別指定結果升序排列(日期中較老的在前)。要求索引中有一個屬性被指定爲時間戳。
- --sort=ts 搜索結果按時間戳分紅組。先返回時間戳在最近一小時內的這組結果,在組內部按相關度排序。其後返回時間戳爲最近一天以內的結果,也按相關度排序。再以後是最近一週的,最後是最近一個月的。在排序模式 一章的SPH_SORT_TIME_SEGMENTS 條目下對此有更詳細的討論。
其餘選項: 性能
- --noinfo (可簡寫爲-q) 使search不在SQL數據庫中查詢文檔信息(Document Info)。具體地說,爲了調試search和MySQL共同使用時出現的問題,你能夠在使用這個選項的同時提供一個根據文檔ID搜索整個文章全文的查詢。細節可參考sql_query_info指令。