Sphinx配置文件分析

#在Sphinx配置文件中,主要包括五個部分:source部分、index部分、searchd部分、indexer部分和common部分(前四部分比較重要);php

#source是數據源,index負責定義索引,searchd負責定義searchd守護進程的相關選項,indexer負責定義生成索引的過程當中索引的功能性限制;html

#在數據源source中,type指定數據庫的類型,目前Sphinx只支持兩種類型的數據庫,一種是MySQL;ios

#sql_host指定主機,sql_user和sql_pass對應數據庫的帳號密碼,sql_db指定數據表,sql_port指定通訊的端口;sql

#sql_query_pre指定在全部的數據庫操做以前須要進行的環境設置,例如指定utf-8和緩存屬性;數據庫

#sql_query指定數據庫查詢語句,這個地方通常不指定where和order by、group by等選項,這些事情通常交給Sphinx去過濾,不過對於分佈式查詢可能會有所區別;緩存

#關於sql_field_string、sql_ranged_throttle會在後面介紹;網絡

#sql_attr_uint用來設置數據項爲無符號整型,若有其它相似屬性可作類比理解;less

#sql_query_info是sql_query的調試版本,由於設計的問題在運行的狀態中常常有問題,註釋掉不使用;分佈式

 

#在索引index中,source指定數據源,path指定數據源的絕對地址,docinfo定義文檔信息的存儲模式,extern表示文檔信息和文檔id分開存放,mlock設置已緩存數據的內存鎖定,爲0的時候不鎖定;大數據

#morphology用於設置詞形處理器,這個在後面會有詳細介紹;

#min_word_len字面意思就能理解,對於中文來講,設置成1比較合適;

#charset_type用來設置數據編碼(指定爲utf-8);

#chinese_dictionary用來指定中文詞典的絕對地址;

#min_prefix_len和min_index_len用來指定最小前綴和最小後綴,這個在後面有詳細介紹;

#html_strip用來指定是否自動去掉全部html標籤;

#enable_star

#preopen指定預先打開索引仍是每次使用索引的時候打開,因爲Sphinx的索引是滾動實現的,因此必定意義上這二者會產生衝突;

#disc=keywords

#在配置分佈式索引的時候,須要指定type=distributed,同時在多個local中指定索引源;

 

#在indexer中,主要設置mem_limit,這個指定索引過程當中的內存使用限制,默認爲32M;

#其餘的可設置項有max_iops,這個指定每秒最大的I/O次數,默認爲0,無限制;

# max_iosize指定最大I/O大小,指定I/O流最大字節大小,默認爲0,無限制;

此外還有write_buffer、max_xmlpipe2_field、max_file_field_buffer等設置;

 

#在searchd中,listen用來定義searchd守護進程監聽的端口和IP;

#log指定searchd進程的運行日誌地址;

#query_log指定搜索日誌的位置;

#read_timeout指定讀操做請求超時時間;

#clien_timeout指定單次會話中,兩次查詢之間最長等待時間;

#max_childrent指定子進程的最大數量;

#persistent_connections_limit指定持續鏈接限制;

#pid_file指定是進程ID文件的路徑;

#max_matches指定查詢的最大結果返回數,相似於SQL語句查詢裏面的limit;

#seamless_rotate指定是否須要無縫切換,是的話指定爲1,作增量索引須要這種模式;

#preopen_indexs指定後臺運行是是否預先打開全部的索引,是的話指定1;

#unlink_old指定是否釋放舊索引,默認爲1;

#mva_updates_pool 指定MVA更新池的大小,默認1M;

#max_packet_size 指定最大容許網絡包大小,默認8M;

# max_filters指定每一個查詢容許最多的過濾器個數;

#max_batch_queries指定每一個組最大的查詢數;

#此外還包括一些關於線程的設置;

 

#關於common;

 

 

 

 

 

#配置項morphology:

#詞形處理器,舉個栗子,在英文中,cats是cat的複數,因此兩個單詞實際上指向同一個事物,因此詞形處理器會把兩個單詞當作一個單詞來處理;

#可能存在的問題,舉個栗子,若是把gps當作gp來處理,天然是荒謬的;

 

#配置項:sql_query_pre=SET SESSION query_cache_type=OFF:

#這個配置項主要爲了設置緩存類型;

#query cache_type包括三個選項,0、一、2;

#0對應於上面的OFF;

#1對應於上面的ON;

#2對應於上面的DEMAND;

#MySQL默認的爲1,也就是默認開啓緩存,除非在查詢語句中指定sql_no_cache。但這個時候即便指定了sql_no_cache也會在緩存中查詢,由於sql_no_cache只是不更新緩存,不表明不會使用過去的緩存;

#當指定爲2的時候,只有當經過query_cache指定緩存項時纔會緩存;

#當指定爲0的時候,會關閉緩存;

 

#配置項sql_field_string:

#這個項目通常指定一個在sql_query中的SQL指定的語句中select的一個數據屬性;

#這個數據屬性增長了索引;

#因此配置項決定了這個數據屬性能夠全文搜索,而且返回詳細信息,很是關鍵;

 

#配置項sql_attr_string:

#這個配置項和sql_field_string的差異是這個數據屬性不具有索引;

 

#配置項sql_ranged_throttle:

#這個配置項能夠和配置項sql_range_step放在一塊兒去理解(注意,沒有d);

#這兩個數據項其實是決定分時搜索的;

#在大數據搜索的時候,咱們傾向於把一個很長的表分爲多個部分去進行查詢;

#舉個例子,假如說有八十萬條數據,咱們每次查找十萬條,而後把全部的查詢結構取並集,就會獲得最終的結果集;

#這個裏面,每次查詢十萬條,由sql_range_step指定,而上個例子中八次查詢的兩次查詢之間的時間間隔,就是由sql_ranged_throttle肯定的;

#爲何要進行分區查詢呢?這是由於數據庫可能會進行更新,這個時候可能須要鎖表等操做;

#問題:數據庫更新的時候須要暫停查找嗎?和分佈式查詢相比,這種解決方案是否是效果很差?

 

 

#配置項charset_table:

#這個配置項是sphinx支持東亞語言搜索的關鍵配置項之一;

#東亞語言指的是漢語、日語、朝鮮語,這些語言的特色是詞彙之間沒有語法標誌(對比與英文的空格),因此分詞系統也是這些語言查詢的特殊之處和關鍵技術;

#在配置這個屬性的時候應該添加http://sphinxsearch.com/wiki/doku.php?id=charset_tables這個頁面裏面對應的所有字段;

#這個配置項是轉換字符表,在上面連接裏複製東亞語言專用的字符轉換表的時候記得修改一些字符,好比箭頭要改爲->,這個網上介紹比較多;

#由於這個配置項的內容過多,爲了保障頁面簡潔推薦寫成多行;

#使用中文詞典這一項不該該添加;

 

#配置項min_prefix_len:

#這個項目對應MySQL一個叫做索引前綴的功能,固然還有索引中綴和索引後綴的概念,原理相同,這裏只介紹索引前綴;

#所謂索引前綴,我我的認爲在英文中用處更大,在漢語中意義不大;

#前綴索引,大概是隻對數據的前幾個字符進行索引;

#在英文中,一個單詞經過查詢前幾個字母就能區分開,在咱們使用電子詞典的時候,輸入三四個字母通常都能匹配到含義相同的詞彙(差異可能只是詞性);

#在漢語中,一個詞彙最少只有一個字,兩個字居多,最長四個字就差很少,而這種狀況下使用索引前綴就沒有太大意義;

#同時,對於地址項,使用索引前綴也沒有意義,由於不少地址的區分是後面的內容,想對而言,郵箱地址可能適合索引前綴;

#到底是否要使用索引前綴,這個要具體問題具體分析;

#言歸正傳,關於min_prefix_len,指定的是一種原理相似的索引方案;

#例如這個配置項指定爲3的時候,lovely就會生成lov、love、lovel、lovely對應的索引項;

 

#配置項ngram_len:

#在啓動中文分詞的前提下,這個配置項的意義不大;

#這個數據項目前只支持0和1;

#在創建索引的時候,若是這個配置項被設置爲爲1,那麼每一個會在字與字之間間隔開,以此爲基礎建立索引;

#另外,這個配置項只會對ngram_chars中包含的字符進行這樣的分割,其餘的沒有限制;

 

#加粗指的是可能須要驗證或者修改;

相關文章
相關標籤/搜索