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

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文件中查找 @CONFDIR@/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

出現以下提示,和剛纔同樣,搜索字符串 @CONFDIR@/log/searchd.log ,而後修改。

l修改前:log            =@CONFDIR@/log/searchd.log
修改後:log            = D:/sphinx-for-chinese/log/searchd.log

修改後保存,而後繼續運行剛纔的cmd命令,這個過程會很長,直到正常爲止。之後直接貼圖了,不在說了。


l修改前:query_log        = @CONFDIR@/log/query.log
修改後:query_log        = D:/sphinx-for-chinese/log/query.log

咱們接下來再試一下剛纔的cmd命令,會發現提示和之前不同了,看下面的圖。

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

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

在服務器管理器界面中,找到sphinx-cn並雙擊這個服務,會彈出一個小窗體,上面有個啓動按鈕,點擊「啓動」按鈕便可,最終效果以下。


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

打開sphinx.conf 並替換全部 @CONFDIR@/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 (原文連接中有下載)html

 



解壓到 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項刪除便可。

mysql

具體sphinx-for-chinese使用方法與sphinx英文版同樣,能夠參考sphinx官方網站的用戶手冊。git

 

原文連接:http://www.panshsoft.net/thread-3-1-1.htmlgithub

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


如下引用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實現容錯處理。算法

相關文章
相關標籤/搜索