如何阻止Sphinx增量源继承父源的sql_query_post_index配置?
解决Sphinx增量源不继承主源sql_query_post_index的问题
我之前也踩过Sphinx配置继承的这个坑,刚好能给你几个靠谱的解决方案。先理清楚你的核心需求:增量源source_delta_merchant_deal_en要复用主源的大部分配置,但绝对不能执行主源里的sql_query_post_index语句对吧?
方案一:用空字符串直接覆盖(快速解决)
在Sphinx 2.2及以后的版本里,你可以直接在增量源里把sql_query_post_index设为空字符串,这样就能完全覆盖主源的配置,不会执行那条UPDATE:
source source_delta_merchant_deal_en : source_merchant_deal_en { # 你的增量源专属配置... sql_query_post_index = "" }
之前你试的老方法可能是只写sql_query_post_index =(不带值),这种写法在新版本里会被Sphinx忽略,仍然继承主源的配置,而带空引号的写法是明确告诉Sphinx:这个源的post索引操作就是空的,啥也不用做。
方案二:拆分公共配置到模板源(长期维护更优雅)
如果你的主源和增量源有大量公共配置,更推荐把通用部分抽成一个模板源,让主源和增量源分别继承它,各自管理专属配置:
# 公共模板:只放主源和增量源都需要的通用配置 source source_merchant_deal_base { sql_host = your_db_host sql_user = your_db_user sql_db = your_db_name # 其他通用配置...(别放sql_query_post_index) } # 主源:继承模板,添加专属的post索引操作 source source_merchant_deal_en : source_merchant_deal_base { # 主源专属的sql_query等配置... sql_query_post_index = UPDATE sphinx SET max_doc_id = max_doc_id_temp WHERE alias = "merchant_deal_en" } # 增量源:继承模板,不需要post索引操作 source source_delta_merchant_deal_en : source_merchant_deal_base { # 增量源专属的sql_query(比如只查更新后的数据)等配置... # 这里不用写sql_query_post_index,自然就不会执行任何操作 }
这种方式从根源上避免了"取消继承"的问题,结构更清晰,后续修改公共配置也只需要改模板源就行。
内容的提问来源于stack exchange,提问作者wesley.fok
相关产品推荐
相关产品推荐

