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

jopen 9年前發布 | 12K 次閱讀 Sphinx 搜索引擎

第一次嘗試用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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!