用Sphinx 建立搜索引擎

Posted by

复制代码 代码如下:

1.       介绍

_db = new MysqlDB(); // 这里的不能进行操作 } /** * 获取处理 * *
@param array $filter // 过滤条件 *用Sphinx 建立搜索引擎。 @param string $field // 获取字段 *
@param int $page // 当前页 * @param int $limit // 页数 */ function
fetch,$field = “*”,$page = 1,$limit = null) {
$this->_db->select->from->where->limit; return
$this->_用Sphinx 建立搜索引擎。db->execute(); } function update{} function insert(){} }
class MemberDAO extends BaseDAO { var $_table = “member”; } $oMember =
new MemberDAO; /** * 常用到的地方: * MVC中model层基类 */ ?>

实际上 sphinx的网站上的title 说的很清楚,这个是一个 “免费开源的SQL 全文索引搜索引擎”。当然,它不是一个完整的搜索引擎,只提供索引
和 查询接口。所以,学习sphinx 主要是要学习:如何建立索引,如何调用查询接口。

他的作者只有一个人,但是,功能的确非常强大。目前,支持下面的特性:

n 高速索引(10M/s, 主流cpu配置)

n 高速查询(2-4G 文本,大概只要0.1s)

n 排序采用的BM25 和 短语相似度 相结合的排序方法,而非向量空间模型。

n 提供分布式搜索功能

n 灵活的查询接口,支持布尔、短语、词语相似度等多种检索模式;

n 可以支持单字节(GBK)和 utf8 编码的数据源

当然,sphinx 也有很多的缺点:

1.       分词比较难搞定,sphinx 是 C 写的,要嵌入分词算法,还是要做很多的工作。

一般现在用分词不是很准确的
LibMMSeg 进行切分。当然,分词不准确一般不会非常的影响搜索的体验。所以没有必要过于强调这一点。如果你要做的不是一个非常精致的搜索,sphinx
肯定是够用了。

 

2.       大多数开源搜索都基本上基于纯文本搜索的理论。并没有对文本的结构进行深入的挖掘。比如pagerank,html 标签标定的关键字,锚文字 等。如果,你要做一个比较好的垂直搜索引擎,可以考虑引入pagerank的机制,当然,存C 的 sphinx 肯定会降低你的开发效率。

说了这样多,只是想说和lucunece
相比,可扩展性差点。但是效率非常高。 

2.       安装
 
 [

上面这个链接中有一个很好的教程,一步一步的做下去就能安装成功了。下面补充一点东西:

 

安装searchd 服务要用下面的命令:

Searchd -–install –c /path/to/config

注意 install 前面是两个 “-”,c前面是一个 “-”

 

还要一点要注意配置一个 stopwords
。方法是,建立一个stopwords 的列表,每个字用空格分开来,然后在每个index
的选项里面加一个 stopwords =
/path/to/stopwords.txt

 

3.       索引

索引的技巧也在
 有一个例子,这个是一个典型的增量索引的例子。当然,增量索引的配置方法不只是一种。下面谈谈怎么更新增量索引。

 

1.       每10分钟,建立一次增量索引。千万不要每10分钟就合并一次索引,实际上,合并索引也非常的消耗时间。

2.       每天的晚上可以更新全部的索引。

增量索引不能反映删除 和 修改的内容,所以,建议主索引要经常的更新。一般来说,对于100万数据左右的情况,这样的方法都是可以的。

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注