sphinx全文搜索Php方面的簡單處理
第一次嘗試用sphinx來做全文搜索,可能有很多見解都不是很正確。有不同的想法,大家可以提出來。
現在版本的sphinx不知道支不支持中文了,問了群里的朋友都說不支持,所有用了以下的這種方法來做。
1、文章的處理。
假如文章表為article_main
id |
title |
summary |
content |
time |
1 |
測試的標題 |
測試的摘要 |
測試的內容 |
123123123 |
由于sphinx不支持中文(真的嗎?這里當它是吧)
我們新建立一個表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碼。
這樣我們在增加文章的時候同時把輸入的標題、摘要、內容處理成utf-8的unicode碼,然后再保存到article_unicode表中。
在配置sphinx的時候再以article_unicode這個表作為源(見:http://my.oschina.net/ptk/blog/495435 )
2、所用到的處理utf-8 unicode的類有如下:
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碼了。
然后保存到表中。
3、當我們作搜索的時候,同樣的先把搜索詞轉化為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);
這樣就可以了。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!