sphinx全文搜索Php方面的简单处理

WBOY
풀어 주다: 2016-06-20 12:49:33
원래의
939명이 탐색했습니다.

第一次尝试用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);
로그인 후 복사

这样就可以了。


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿