sphinx/coreseek及时更新删除索引数据

发表时间:2014-08-15  分类:sphinx  浏览次数:4693

当我们删除数据时,sphinx需要等到更新索引文件时,才会更新。而我们的索引文件不可能实时更新的。所以就造成搜索出来的数据经常不存在的了。解决这个问题,除了实时索引外,其实我们还可以利用一个小技巧就可以实现:

方法一:

具体就是:建立数据表的时候就多一个字段,字段名为deleted


当php操作删除数据的时候,同时对索引进行更新,使用UpdateAttributes


然后当你查询的时候设置过滤SetFilter,将deleted为1的排除就可以了


当然,上面只是一个方法

方法二:

不改变搜索实体的情况下,我们可以利用UpdateAttributes来把某个筛选项弄成永远不可能在正常范围之内的值。这样也可以起到删除临时数据的方法的了。


注意:以上二种方法,使用UpdateAttributes只是在内存中删除的了。


可以在配置文件searchd

# UpdateAttributes() 调用时候更新是否隔一段时间写入磁盘  
# 下面数据说明900秒后,自己写入磁盘,实现永久更新。
# attr_flush_period = 900

UpdateAttributes使用示例:

$cl->UpdateAttributes ( "test1", array("group_id"), array(1=>array(456)) );
$cl->UpdateAttributes ( "products", array ( "price", "amount_in_stock" ),
array ( 1001=>array(123,5), 1002=>array(37,11), 1003=>(25,129) ) );

第一条示例语句会更新索引“test1”中的文档1,设置“group_id”为456.第二条示例语句则更新索引“products”中的文档1001,1002和1003。文档1001的“price”会被更新为123,“amount_in_stock”会被更新为5;文档1002,“price”变为37而“amount_in_storage”变为11,等等。




评论列表

  • 网友   2017-03-04 11:17
    bobobt.com 磁力搜索引擎
  • 1 篇文章 1/1 页

提交评论