sphinx-for-chinese在windows下安裝與使用方法

來源:互聯網
上載者:User

標籤:管理員   內建   indexer   不用   使用方法   term   均衡   一段   整合   

sphinx-for-chinese的使用方法將使用 sphinx-for-chinese-2.2.1-dev-r4311-win32 為例子,目前我只找到最新的是這個版本2013.11.09發布。
:http://sphinxsearchcn.github.io/


下載完後解壓出來得到以下檔案

將bin目錄與及所有檔案複製到你喜歡的安裝目錄,比如D盤或E盤,這裡我放到D盤sphinx-for-chinese檔案夾(名字任意,你可以取別的英文名)
然後在剛才的sphinx-for-chinese目錄下建一個etc檔案夾並複製 sphinx.conf.in 到剛才建立的etc目錄中,然後將sphinx.conf.in重新命名成sphinx.conf。最終我的D盤sphinx-for-chinese目錄檔案結構如下:


現在將 sphinx-for-chinese 安裝成windows服務程式,這樣系統啟動時會自行運行sphinx-for-chinese。
1.開啟Windows的CMD表單,即命令列提示符表單(位置:開始菜單 -》 所有程式 -》附件),記得要用管理員身份運行。(在圖片上點右鍵就可以用管理員身份運行)。


在CMD視窗中輸入以下字串,記得你安裝的目錄和我這不一樣是要變的。
D:\sphinx-for-chinese\bin\searchd --install --config D:\sphinx-for-chinese\etc\sphinx.conf --servicename sphinx-cn

--servicenamesphinx-cn 這一段大家看好,--servicename後面可以是你自己想要的英文名稱。


刪除服務的命令是:D:\sphinx-for-chinese\bin\searchd --delete  --servicename sphinx-cn

2. 現在,來看看剛才的服務有沒有安裝成功。案頭上 找到 “我的電腦” 或 “電腦” 這個表徵圖,然後在上面右鍵會彈出一個菜單。點”管理“菜單後就會出現“伺服器管理員”介面。


“伺服器管理員”介面中,找到並展開“配置”就能看到有一個“服務” 呢,然後點這個服務,在右邊就會出現一個大列表。


在右邊列表中,看看有沒有一個叫 sphinx-cn 名稱的服務,如果有,就說明安裝是成功的,但不一定代表這個服務在運行。

大家看,沒有運行,估計是運行不起來,雙擊,開啟看看,如。



我們看到,啟動類型是“自動”,但操作狀態是:已停止。大家可以點擊 “啟動“ 按鈕,看能不能啟動,如果能啟動,那就恭喜你,當目前為止我這是不能啟動的。需要一些配置才能啟動。

先在 sphinx-for-chinese 目錄下建立data檔案夾和一個log檔案夾,一會要用到,名稱可以任意(用英文或拼音命名),但後面填寫必須和這一樣。
在cmd表單中,輸入以下命令,看出現什麼資訊,從而排除為什麼上面的服務啟動不了。
D:\sphinx-for-chinese\bin\searchd  --config D:\sphinx-for-chinese\etc\sphinx.conf

上面顯示 建立pid檔案時找不到檔案或目錄。接下來要做的是在sphinx.conf檔案中尋找 @[email protected]/log/searchd.pid  找到後修改成
pid_file        = D:/sphinx-for-chinese/log/searchd.pid
接著再執行剛才的cmd命令,在CMD表單上按一下鍵盤向上鍵,就會自動出現,之前輸入的命令。
D:\sphinx-for-chinese\bin\searchd  --config D:\sphinx-for-chinese\etc\sphinx.conf

出現如下提示,和剛才一樣,搜尋字串 @[email protected]/log/searchd.log ,然後修改。

l修改前:log            [email protected]@/log/searchd.log
修改後:log            = D:/sphinx-for-chinese/log/searchd.log

修改後儲存,然後繼續運行剛才的cmd命令,這個過程會很長,直到正常為止。以後直接貼圖了,不在說了。


l修改前:query_log        = @[email protected]/log/query.log
修改後:query_log        = D:/sphinx-for-chinese/log/query.log

我們接下來再試一下剛才的cmd命令,會發現提示和以前不一樣了,看下面的圖。

看起來正常了,但沒有索引,這個一會再說,先開啟windows 進程管理器,看看searchd.exe進程在不在.

看圖中顯示,searchd.exe已經運行了,我們強行結束這個進程吧(結束進程就不用我說了吧),改用服務啟動試試。

在伺服器管理員介面中,找到sphinx-cn並雙擊這個服務,會彈出一個小表單,上面有個啟動按鈕,點擊“啟動”按鈕即可,最終效果如下。


好了,當目前為止,初步安裝成功,接下來要開啟sphinx.conf並進行一些配置.

開啟sphinx.conf 並替換所有 @[email protected]/data/   字串為 D:/sphinx-for-chinese/data/ 然後儲存。


然後,停止剛才 sphinx-cn 服務,再用cmd運行一下
D:\sphinx-for-chinese\bin\searchd  --config D:\sphinx-for-chinese\etc\sphinx.conf
看有沒有錯誤資訊。

可以看出,只差沒有索引了,在工作管理員中,結束searchd.exe進程,然後對
sphinx.conf進行設定,這裡將使用我的資料庫表為例,大家可以修改成自己的。

source src1 這裡src1可以改名,改名後其它地方用到src1是就得和這個一樣
設定資料庫資訊
type            = mysql
    sql_host        = localhost
    sql_user        = test
    sql_pass        =123456
    sql_db            = www.panshy.com
    sql_port        = 3306    # optional, default is 3306


以下資訊,設定檔中沒有,就自己加上

找到 sql_query_pre            = SET NAMES utf8 去掉前面的 #號
sql_query_info_pre      = SET NAMES utf8
sql_query_info            = SELECT * FROM www_panshy_com_ecms_pansharticle  WHERE id=$id
\
sql_query                = SELECT id, newstime AS date_added, title, newstext, titleurl, id as msgid, classid, userid,username,username as softtype,username as filesize, 1983  as dbtype  FROM  www_panshy_com_ecms_pansharticle
                                                              #sql_query第一列id需為整數

修改完後,儲存,然後在cmd表單中運行,以下命令進行索引。
D:\sphinx-for-chinese\bin\indexer.exe  --config D:\sphinx-for-chinese\etc\sphinx.conf --all
正常的話是下面這樣子


data目錄下產生了一些檔案,如



最後在cmd中運行D:\sphinx-for-chinese\bin\searchd  --config D:\sphinx-for-chinese\etc\sphinx.conf 再次查看效果,正常的圖:


到目前為止,sphinx-for-chinese基本安裝配置完成。接下來就是整合中文分詞啦.
下載xdict_1.1.tar.gz (原文連結中有下載)

 



解壓到 D:\sphinx-for-chinese\etc目錄得到一個xdict_1.1.txt檔案。


在cmd表單中,運行以下命令進行轉換。
d:\sphinx-for-chinese\bin\mkdict D:\sphinx-for-chinese\etc\xdict_1.1.txt D:\sphinx-for-chinese\etc\xdict

得到一個xdict檔案



修改sphinx.conf索引設定檔
尋找 charset_type        = sbcs 然後刪除掉或注釋掉這行
添加以下兩項
    charset_type = utf-8
    chinese_dictionary = D:/sphinx-for-chinese/etc/xdict





至此,完成中文支援配置。

以上如果出現index rt錯誤,請將設定檔中index rt項刪除即可。

具體sphinx-for-chinese使用方法與sphinx英文版一樣,可以參考sphinx官方網站的使用者手冊。

 

原文連結:http://www.panshsoft.net/thread-3-1-1.html

http://www.panshy.com/articles/201608/dev-2752.html


以下引用sphinx-for-chinese官方原文

http://sphinxsearchcn.github.io/

3.一些注意事項sphinx-for-chinese只支援UTF-8編碼,資料來源輸出資料時請做轉換,使用MySQL時一般需要添加"SET NMAES utf8"語句。使用xmlpipe時,需要注意兩點:一個是XML中儘可能使用CDATA標籤,以避免特殊字元影響xml解析;另一個是sphinx配置中啟用xmlpipe_fixup_utf8=1選項,以儘可能的避免因非法UTF-8字串引起解析錯誤。
若需要檢查中文分詞支援是否啟用,請使用search命令,例子如下:

./search -c ../etc/sphinx.conf 分享身邊的精彩
sphinx-for-chinese 2.1.0-dev (r3006)
Copyright (c) 2008-2011, sphinx-search.com

using config file ‘../etc/sphinx.conf‘...
index ‘test1‘: query ‘分享身邊的精彩 ‘: returned 0 matches of 0 total in 0.000 sec

words:
1. ‘分享‘: 6 documents, 7 hits
2. ‘身邊‘: 26 documents, 38 hits
3. ‘的‘: 5344 documents, 178743 hits
4. ‘精彩‘: 5 documents, 6 hits

可以看到words中列出了各個中文單詞,說明中文分詞啟用成功。

出現亂碼時,請檢查資料來源的編碼是否為UTF-8,程式API中的調用是否為UTF-8,若為命令列測試,請檢查終端環境是否為UTF-8。windows的命令列環境為GBK,若在windows的命>令行下進行測試,請注意輸入資料的編碼。

如果資料來源不是MySQL,而是oracle、純文字或者其他資料來源,可以採用xmlpipe的方式進行索引。具體方法是採用容易快速開發的語言,如PHP,Python,Ruby或者Lua(C,C++等當然也可以)等讀取資料來源,然後按照既定格式輸出XML格式的資料,供sphinx讀取。99.9%的情況下sphinx是可以索引任何資料的,不需要額外的低層處理。

4.中文搜尋最佳化對中文進行全文檢索索引時,一般需要進行中文分詞(segmentation)。中文分詞的過程,一般叫做tokenize,也就是將一段文本分成多個token,索引的時候對每個token進行倒排索引(inverted index)。中文與拉丁語系不同,例如英文單詞之間用空格做區分,而中文沒有明顯的單詞分隔,這就需要演算法對中文字串進行分詞,而分詞的精確度就會影響中文搜尋的效果。舉個例子,“研究生命起源”如果分成“研究生”“命”“起源”,用“研究”一詞是搜尋不到的,用“生命”也搜尋不到;如果分成“研究”“生命”“起源”,則用“研究”和“生命”都可以搜尋到。同理,如果“上海市”被分成“上海”“市”,用“上海”是搜尋不到的。

為了提高搜尋效果,一般可以:

提高分詞精度。這個一般與分詞演算法有關,而現在常用的基於詞典的分詞演算法在分詞精度上差別不大(不會有數量級的差別)。另外可以對詞典進行調整,比如針對醫藥類網站,可以在詞典中添加醫藥類詞庫,針對特殊行業領域進行詞典最佳化,也可以提高分詞效果。關於詞庫,一般可以參考搜狗細胞詞庫。

採用同義字、近義詞處理。這一部分主要是針對“餐廳”“餐館”或者“上海”“上海市”等同義或者近義處理。現在有些針對索引的分詞演算法採用多分的處理方法,比如將“上海市”分為“上海市”“上海”“市”,這樣“上海市”“上海”都可以搜尋到,但這樣會增加token數量,增加索引資料,影響搜尋效率,並且單純靠演算法對多分的處理粒度很難控制;另外還有將同>義詞詞庫整合到全文檢索索引裡的做法,這樣會增加搜尋程式的複雜度,不利於升級和微調。這裡建議的做法是將同義字、近義詞的處理放到搜尋外圍,即對使用者輸入的搜尋語句進行處理和轉換,利用sphinx的搜尋文法進行處理。具體做法,可以整理一份同義字、近義詞的詞庫,利用記憶體型資料庫儲存,作成daemon或者web service的介面,對使用者的搜尋輸>入進行預先處理,不僅開發成本低,速度快,而且模組化高,容易調整,利於升級。
5.搜尋效能最佳化以及高可用容錯叢集搭建當索引資料過大或者訪問量過大時,可以:

對索引資料進行分區,這一部分與資料庫拆表十分類似。即把資料水平或者垂直資料分割,並在應用程式裡做一些調整,不同的搜尋請求,分配到不同的索引。這種做法的思路,還是儘可能的減少單個索引資料區塊(index data block)的大小,進而減少每一次請求所需掃描資料的大小,提高回應時間。

合理的更新策略。根據更新頻率,採用main+delta的兩層處理或者main+today+delta的三層處理,也可以減少更新負擔,提高索引資料的更新速度。這一部分通常需要具體問題具體分析。

採用分散式處理,即將資料水平資料分割,分布在多台機器上。這一部分可以參考http://sphinxsearch.com/docs/2.0.2/distributed.html。

高可用和容錯處理。一個是採用replication的處理方法,即一台機器作為master負責索引更新,不接受外部請求,另外多台機器運行sphinx執行個體,作為slave接受外部請求。master通過inotify和rsync更新slave上的索引資料,外部請求根據演算法分配到多個slave上,實現負載平衡和容錯處理。同時,還可以利用HAProxy和VRRP實現高可用性和容錯叢集的>搭建。另外一個方法,是採用sphinx內建的分散式處理方法,並結合heartbeat或者VRRP實現容錯處理。

sphinx-for-chinese在windows下安裝與使用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.