MySQL + SphinxSearch,rt实时索引同步的问题

用户昵称不能为空 2019-02-19 05:51:30
使用sphinx作为全文搜索,在进行同步MySQL记录到Sphinx时需要执行 `indexer --rotate --all` 否则无法更新到全部新增数据。但如果数据量过大,将执行时间过长。数据更新频繁,则需要一直执行这个命令。




网上的方案,通过记录增量ID,再生成增量索引数据,再合并增量索引数据到全量索引中。
但存在问题:

1)如果数据源MySQL记录中有被删除,如何做到同步实时同步到这个查询索引,因为plain类索引是不能做删除。
2)这样的方案并未用到RT实时索引。如何使用到RT索引,什么情况下使用。SphinxQL 可否同时在 RT索引 和 plain 索引中查询?









...全文
725 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaokai469906959 2019-07-03
  • 打赏
  • 举报
回复
不要物理删除 源那加上or update_time
yt_php 2019-02-26
  • 打赏
  • 举报
回复
不好意思 不清楚了
  • 打赏
  • 举报
回复
打算放弃使用Sphinx 3x版本了,感觉这东西很多严重问题!!

kbatch指令刚开始会运行删除main索引,多执行几次就出问题了,不生效了,重新启动重建全部又可以了。
--merge 也是,一开始merge delta到main 正常OK,多执行几次,就完全不对头了,提示执行成功但数据完全没merge过去。

SphinxSearch 官方都一种不更新不维护的状态了。
  • 打赏
  • 举报
回复
引用 1 楼 yt_php 的回复:
感谢邀请,win和linux上的sphinx我都简单使用过,你说的问题确实需要考虑。
对你的提问,我也不是很清楚,也没实践过,有几点想法仅供参考

如果全部更新索引,那么就算N分钟更新一次,也会有数据的不准确的情况,也就是说这种情况无法实时准确,除非每更新数据就执行一下更新索引。
其二数据量如果庞大的话,对系统也是一种开销。我觉的可以在系统运行时,实行增量索引,每天访问低峰期全部更新一次索引。
sphinx可以只返回Id,那么可以对返回的结果进行二次过滤,筛选掉实际数据不符合的记录,小批量验证应该影响不大。

另外一个想法是每更新记录就更新索引,定义多个源,比如id平均2W左右定义一个源,更新的记录在哪个id区间,则更新哪个源。这样不用对结果二次筛选。

如果数据量并不大,可以全部更新。



现在使用Sphinx2完成了,不过移植到Sphinx3上面出现问题。提示`--merge-klists`未知参数。
ERROR: malformed or unknown option near '--merge-klists'.

yt_php 2019-02-19
  • 打赏
  • 举报
回复
感谢邀请,win和linux上的sphinx我都简单使用过,你说的问题确实需要考虑。 对你的提问,我也不是很清楚,也没实践过,有几点想法仅供参考 如果全部更新索引,那么就算N分钟更新一次,也会有数据的不准确的情况,也就是说这种情况无法实时准确,除非每更新数据就执行一下更新索引。 其二数据量如果庞大的话,对系统也是一种开销。我觉的可以在系统运行时,实行增量索引,每天访问低峰期全部更新一次索引。 sphinx可以只返回Id,那么可以对返回的结果进行二次过滤,筛选掉实际数据不符合的记录,小批量验证应该影响不大。 另外一个想法是每更新记录就更新索引,定义多个源,比如id平均2W左右定义一个源,更新的记录在哪个id区间,则更新哪个源。这样不用对结果二次筛选。 如果数据量并不大,可以全部更新。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧