Coreseek®  
 | 首页 | 注册 | 回复 | 搜索 | 统计资料 |                 网站首页产品服务开放源码安装使用常见问题中文手册社区交流联系我们 
全文检索 论坛首页 / 全文检索 /

合并索引的奇怪问题

 
nftw
会员
#1 | 发表时间: 2010 08 26 11:12
回复 
我用main+delta模式,每隔些时间就用如下命令将新生成的delta索引合并到main索引当中,
/usr/local/coreseek/bin/indexer --rotate --merge main delta --merge-dst-range deleted 0 0 --config /usr/local/coreseek/etc/sphinx.conf

起初都还正常,隔一段时间(周期性合并索引完成后)用如下语句查询main中“中国”,都有更新!
SELECT *
FROM tbl JOIN `main`
ON E_info.infoID = `itftxt`.id
WHERE query='中国;sort=extended:timestamp DESC;offset=0;limit=100;';

但总是不知什么时候开始,main索引中就没有含"中国"二字记录的更新了,一直是以前老的记录,但查delta索引中却有最新记录!
SELECT *
FROM tbl JOIN `delta`
ON E_info.infoID = `itftxt`.id
WHERE query='中国;sort=extended:timestamp DESC;offset=0;limit=100;';

但main中还是有记录更新的,因为我用如下不加关键词的sql语句查询,也能查到最新的记录,唯独用最上边那条加了关键词的语句查不到最新记录,非常奇怪!

SELECT *
FROM tbl JOIN `main`
ON E_info.infoID = `itftxt`.id
WHERE query=';sort=extended:timestamp DESC;offset=0;limit=100;';
HonestQiao
会员
#2 | 发表时间: 2010 08 26 11:24
回复 
所使用的具体版本是什么?
nftw
会员
#3 | 发表时间: 2010 08 26 11:35
回复 
HonestQiao:
所使用的具体版本是什么?

最新的 coreseek-3.2.13.tar.gz
nftw
会员
#4 | 发表时间: 2010 08 26 11:40
回复 
总之,之后如何合并都是如此现象!
HonestQiao
会员
#5 | 发表时间: 2010 08 26 11:47
回复 
目前建议不要合并。
nftw
会员
#6 | 发表时间: 2010 08 26 14:07
回复 
HonestQiao:
目前建议不要合并。

好的,是目前版本的bug吗?

总的索引很巨大的话,每次更新的内容又相对较少,除了文档中 main+delta模式外,还有什么好的解决办法吗?
HonestQiao
会员
#7 | 发表时间: 2010 08 27 11:21
回复 
不用合并也完全可以很好使用的。
nftw
会员
#8 | 发表时间: 2010 08 27 13:25 | 修改: nftw
回复 
HonestQiao:
不用合并也完全可以很好使用的。

确实非常好用!

但是这样的,乔先生,我所要建立的索引数据量非常巨大!建一次要近一个小时之久!

但我们的应用又要求一定的实时性,至少能够每半个小时更新一次!这么大的数据量每次都要去建立索引,显然不符合要求!

用main+delta模式,选择合并就是为了每次只建立更新的数据记录,并合并进去,达到一定的实时性要求!

诚如乔先生所说,我本也不喜欢用合并。
如果有别的办法能保证这个实时性的要求更是求之不得,非常感谢乔先生的解答!
HonestQiao
会员
#9 | 发表时间: 2010 08 27 14:58
回复 
定期,例如一周或者一月执行一次完全索引。

在这之间,仅增量索引更新。
如果你嫌不及时,还可以设置三级四级五级增量索引。在客户那里我们这么做效果非常好。
nftw
会员
#10 | 发表时间: 2010 08 27 15:17
回复 
好的乔先生,您的这个方法好!

您在这里说得三级,四级增量索引,比如说,我每天一个增量索引,其次可以每个小时做一个增量索引!按照时间级别的不同来更新这些增量索引?

如果是这样的话,用sphinxSE查询呢? 能查遍所有的记录吗?比如我还需要查询到一个月以前的记录等等!
HonestQiao
会员
#11 | 发表时间: 2010 08 27 22:12
回复 
如果要使用SphinxSE的话,那么就必然需要受到诸多限制的。
nukq
会员
#12 | 发表时间: 2012 01 31 22:35
回复 
遇到了同样的问题

Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]


在测试环境测试几次正常。但是到生产环境运行一段时间多次合并后出现跟楼主同样问题
比如 @mobile 13221243523 查不到了
@name 陈昌好 查不到任何数据
@name 昌 查到几条数据,但是里面的属性值根本就不对(出现了不可能存在的属性值,比如某个属性值只可能是0-100的值,但是从主索引中查出来的可能变成了23413)

不知道是不是Sphinx本身的bug还是coreseek支持中文时引入的 :)

现在只好改成不合并了,用 "main,delta"的方式来查

这种方案虽然能满足大多数需求,但是我这里遇到一个比较麻烦的事情:

1. 我这里main和delta存在交集,delta的一部分数据也存在于main中,当然delta的更新
2. 我用到了统计功能,就是需要total total_found @count这类值

那么问题来了:
1. 当 main和delta的交集大于1000
2. 当满足条件的文档位于交集部分的结果集也大于1000

那么最后得到的统计值是偏大的,感觉交集部分的被重复统计了,(以上两个1000为猜测值,因为数据量小的时候没问题)


解决我这个问题的关键貌似需要main和delta不能存在交集,当然文档中的例子也是没有交集的。

但是我这里的应用因为种种原因很难做到没有交集,不知道怎么解决好
nukq
会员
#13 | 发表时间: 2012 02 01 12:40
回复 
奇怪,测试机上一样的设置,一样的crontab 定时更新设置,没法重现问题

我怀疑是不是--rotate的问题

indexer delta --rotate
# 是否需要加上 sleep 10 等上一段时间
indexer --merge main delta --rotate


因为正式环境coreseek访问压力比较大 一天100万次查询,执行merge的时候可能delta索引刚好在轮换中,碰到原delta数据正在进行更名和unlink,是否造成一些预料不到的结果?


另外,这个版本的 --merge-killlists 不起作用,合并后的main还能按照老关键词命中,是不是bug?
 
回复
Bold Style  Italic Style  Image 链接  URL 链接 
发帖注意:
  • 网址中请去掉http://开头,例如:您需要输入www.coreseek.cn,而不是http://www.coreseek.cn
  • 咨询问题,请贴出详细的操作系统版本、Coreseek版本(Linux环境请给出编译参数)
  • 请仔细查看中文手册和本站安装指南,确认操作正确
  • 请仔细查看常见问题解答,也许你的问题已经有解决方法

» 帐号  » 密码 
发帖前请登陆, 或者 注册 .