sphinx全文搜索Php方面的簡單處理

第一次嘗試用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/495435htm

二、所用到的處理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);

這樣就能夠了。

相關文章
相關標籤/搜索