我最近实现了一个由 solr 驱动的自动完成/自动提示功能。我的 solr 实现是使用 rails sunspot gems。自动完成搜索根本不通过 rails,而是通过 apache 反向代理直接到 solr 服务器。因此,在这种情况下,太阳黑子的作用是在创建或更新(或删除)记录时重新索引。
我的问题是,当创建或保存记录时,触发延迟作业重新索引,它不会反映在仅生产中的自动完成搜索中。当记录保存在开发或暂存中时,更改会立即反映在自动完成搜索中。
我的代码和我的 solr 配置都在 git 中管理,因此它们在我的所有环境(开发、登台和生产)中都是相同的。我还没有进行任何生产特定的配置更改(还没有!)。我已将 MySQL 数据库和 solr 索引文件从生产环境复制回其他环境,以使一切都相同。我已经重新启动了,但 rails 和 solr 多次确保可以确定。
在生产中,我看到作业通过了延迟作业,并且我在 sunspot solr 日志中看到了更新。虽然,大部分日志输出对我来说仍然是希腊语。我已经在生产和开发之间进行了逐行比较,它们看起来或多或少相同。
我已经使用 curl 直接针对 solr 服务器进行了测试,以确保只有我和 solr——没有 apache、没有网络、没有浏览器。
当保存相同的记录时,它会启动作业以重新索引其一堆子对象,并且这些子对象确实会按预期重新索引。
此外,如果我使用该模型的 rake 任务重新索引,它会正确重建索引。这只需要几分钟,所以这就是我现在要做的事情。
所以,问题是这种类型,在这种环境中,仅在创建/更新时。
我能确定的唯一区别是负载,尽管我的网站用户很少,很难认为这很重要。
知道可能是什么原因造成的,或者我接下来应该看什么来解决这个问题?我的猜测是缓存,但由于我没有进行任何类型的生产调整,它应该是相同的。除非黑子做了我不知道的事情。