search - Solr 文档的频繁更新 - 效率/可扩展性问题

标签 search solr full-text-search solandra

我有一个 Solr 索引,其文档字段如下:

id, body_text, date, num_upvotes, num_downvotes

在我的应用程序中,使用一些整数id和一些body_text(最多500个字符)创建文档。日期设置为输入时间,num_upvotesnum_downvotes 从 0 开始。

我的应用程序使用户能够对上述内容进行赞成和反对,我想在 Solr 而不仅仅是数据库中跟踪这一点的原因是我希望能够考虑赞成和反对的数量进入我的搜索

这是一个问题,因为您不能简单地更新 solr 文档(即增加 up_votes 的数量),并且必须替换整个文档,考虑到需要访问我的数据库来获取所有相关数据,这可能相当低效再次。

我意识到该解决方案可能需要不同的数据布局,或者可能需要多个索引(尽管我不知道您是否可以跨 solr 核心查询/评分)。

有人可以就如何解决这个问题提供任何建议吗?

最佳答案

我在类似问题中使用的解决方案是更新数据库中的信息,并使用自上次更新以来修改的文档每十分钟执行一次 SOLR 更新/插入。

每天晚上,当我没有太多流量时,我都会进行索引优化。 每次导入后,我都会在 SOLR 配置中设置一些预热查询。

在我的 SOLR 索引中,我有大约 150 万个文档,每个文档有 24 个字段,整个文档大约有 2000 个字符。 我每 10 分钟更新大约 500 个文档的索引(未优化索引),并且执行大约 50 个热身查询,其中包括最常见的方面、最常用的过滤器查询和自由文本搜索。

我不会对性能产生负面影响。 (至少它是不可见的)-我的查询平均运行时间为 0.1 秒。 (在每 10 分钟更新一次之前,平均查询时间为 0.09 秒)

稍后编辑:

在此更新期间我没有遇到任何问题。我总是从数据库中获取文档并使用 SOLR 的唯一键将它们插入。如果文档存在于 SOLR 中,它将被替换(这就是我所说的更新)。

更新 SOLR 的时间不会超过 3 分钟。事实上我每次更新后都会休息10分钟。所以我开始更新索引,等待它完成,然后再等待 10 分钟再次开始。

我没有查看当晚的性能,但对我来说这不相关,因为我想在用户访问高峰期间获得最新的数据信息。

关于search - Solr 文档的频繁更新 - 效率/可扩展性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8154093/

相关文章:

ruby-on-rails - 用于 Rails 的谷歌网络搜索 API?

mysql - Solr DataImportHandler 配置

python - 在 Lucene/Solr、Whoosh、Sphinx、Xapian 中,哪个与 Python 集成得最好?

search - 如何搜索 Google 云存储桶?

php - MYSQL 在重型数据库中的搜索速度

mongodb - 标签搜索的数据存储解决方案

elasticsearch - ElasticSearch 中的复合词处理 - 将 "splitted"和 "joined"形式视为相同

solr - 使用 zkcli 从 ZooKeeper 中删除/删除 Solr 配置?

python - 索引聊天日志并在 Django 中搜索它们

mysql - 寻找以低内存成本执行全文搜索的解决方案