第一次尝试用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);
这样就能够了。