seach和seachd的区别
2019獨角獸企業重金招聘Python工程師標準>>>
search是sphinx中的一個輔助工具,searchd負責服務器類環境中的搜索,而search專注于在命令行上對索引進行快速測試,而不需要構建一個復雜的架構來除了到服務器端的連接和處理服務期返回的響應。
注意:serch并不是設計用來作為客戶端應用程序的一部分,強烈建議用戶不要針對search編寫借口,相反,應該針對searchd。sphinx提供的任何客戶端API也都不支持這種用法。(任何時候search總是每次都重新調入索引,而search會把索引緩沖在內存中以利性能)。
很多新的特性先在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) 將匹配模式設為?擴展比配, 版本 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指令。
轉載于:https://my.oschina.net/u/919580/blog/113177
總結
以上是生活随笔為你收集整理的seach和seachd的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种流行的AJAX框架:jQuery,M
- 下一篇: 深入理解指针函数