当前位置:首页 > PHP教程 > PHP总结归纳

如何将Sphinx配置成缓存服务器

大家都知道sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。 先来了解下sphinx的使用的文件,sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl

大家都知道sphinx是一个全文索引程序,它的高速查询能力也是有目共睹的。除了这些,我们是否还能挖掘点别的功能出来呢?不如作为一个简单的缓存服务器。

先来了解下sphinx的使用的文件,sphinx使用的文件包括 .sph, .spa, .spi, .spd, .spp, .spm ,.spl。

  • sph:头文件,保存的是系统的配置文件。
  • spi:保存wordid及指向此wordid对应的文档信息在spd文件的指针, spi文件在检索程序启动时完全加载入内存。 spi文件是分块的,块内排序,块之间也排序。分块的目的应该是为了快速检索到wordid, 因为spi中的wordid是变长压缩的,索引需要先在块级别做二分定位,再在快内解压缩查找。
  • spa:存储docinfo的文件,检索程序启动时会把此文件加载如内存,sphinx可以指定docinfo的存储方式:
    • inline:存储到spd文件中。
    • extern:单独存储,就会生成spa文件。
  • spd:文档列表。
  • spp:关键字所在位置列表。
  • spm:在docinfo中,有一种特殊的属性,叫mva,多值属性。 sphinx对此属性特殊处理,需要存储在spm文件中。 检索程序启动时会把此文件加载如内存。 此属性在docinfo对应位置存储其在此文件中的字节偏移量。
  • spk:killlist
  • spl:索引锁

通过介绍可以得知sphinx存储的文档的属性,在0.98之前的版本是不存储的,我们是不是可以利用这些数据作为缓存使用呢,根据docid获取文档的信息。

通过hack搜索服务添加searchd_command_docinfo指令,客户端api添加getdocinfo函数可以达到预期的效果。

php示例代码:

require 'sphinxapi.php'; $cl = new sphinxclient (); $cl->setserver(); $res = $cl->getdocinfo(1, 'singer'); print_r($res);

结果如下:

array ( [singer_id] => 1 [singer_name] => 阿牛 [cate_id] => 1 [tag_ids] => array ( [0] => 110 [1] => 114 [2] => 127 ) [song_number] => 137 [album_number] => 14 )

patch文件 : https://gist.github.com/2251422

参考文章

  • sphinx简析
  • sphinx的spx文件格式


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!