第一次尝试用sphinx来做全文搜索,可能有很多见解都不是很正确。有不同的想法,大家可以提出来。
现在版本的sphinx不知道支不支持中文了,问了群里的朋友都说不支持,所有用了以下的这种方法来做。
1、文章的处理。
假如文章表为article_main
立即学习“PHP免费学习笔记(深入)”;
| 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表中。
PhpEIP企业信息化平台主要解决企业各类信息的集成,能把各种应用系统(如内容管理系统,网上商城,论坛系统等)统一到企业信息化平台中,整个系统采用简单易用的模板引擎,可自定义XML标签,系统采用开放式模块开发,符合开发接口的模块可完全嵌入到平台;内容管理模块可自定义内容模型,系统自带普通文章模型和图片集模型,用户可以定义丰富的栏目构建企业门户,全站可生成静态页面,提供良好的搜索引擎优化;会员管理模
0
在配置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);这样就可以了。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号