第一次嘗試用sphinx來作全文搜索,可能有不少看法都不是很正確。有不一樣的想法,你們能夠提出來。
php
如今版本的sphinx不知道支不支持中文了,問了羣裏的朋友都說不支持,全部用瞭如下的這種方法來作。html
一、文章的處理。laravel
假如文章表爲article_maingit
id |
title |
summary |
content |
time |
1 |
測試的標題 |
測試的摘要 |
測試的內容 |
123123123 |
因爲sphinx不支持中文(真的嗎?這裏當它是吧)app
咱們新創建一個表article_unicode測試
id |
article_id |
title |
summary |
content |
time |
1 |
1 |
23243 23123 12213 |
12312 12312 12345 |
12312 12312 12345 | 123123123 |
這個新的表的結構和article_main的內容是同樣的,可是儲存的是中文的utf-8的unicode碼。.net
這樣咱們在增長文章的時候同時把輸入的標題、摘要、內容處理成utf-8的unicode碼,而後再保存到article_unicode表中。code
在配置sphinx的時候再以article_unicode這個表做爲源(見:http://my.oschina.net/ptk/blog/495435 )htm
二、所用到的處理utf-8 unicode的類有以下:blog
http://git.oschina.net/ctk/laravel5_backend/blob/master/app/Libraries/Spliter.php
調用方法以下:
$titleSplited = $spliterObject->utf8Split($data['title']);//文章標題 $index['title'] = $titleSplited['words']; //這樣獲得的值就是文章標題的utf-8的unicode碼了。
而後保存到表中。
三、當咱們做搜索的時候,一樣的先把搜索詞轉化爲unicode碼,再用這個碼來做sphinx的搜索
$object = new \stdClass(); $object->keyword = Request::input('keyword'); $searchProcess = new Process(); //這裏其實就是把keyword轉爲unicode,我封裝了一下。 $keywordUnicode = $searchProcess->prepareKeyword($object->keyword); //而後經過sphinx搜索處理數據,最後拿到文章的id,即article_unicode表中的article_id $object->sphinxResult_ArticleIds = $searchProcess->sphinxSearch($keywordUnicode); //經過article_id再來作常規的查詢。 $articleList = (new SearchModel())->activeArticleInfoBySearch($object);
這樣就能夠了。