您好,欢迎访问一九零五行业门户网

如何将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:killlistspl:索引锁通过介绍可以得知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文件格式 原文地址:如何将sphinx配置成缓存服务器, 感谢原作者分享。
其它类似信息

推荐信息