Solr文档的频繁更新 - 效率/可伸缩性问题

DJS*_*nny 5 search solr full-text-search solandra

我有一个Solr索引,文档字段类似于:

id, body_text, date, num_upvotes, num_downvotes
Run Code Online (Sandbox Code Playgroud)

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

我的应用程序为用户提供了对上述内容进行upvote和downvote的能力,以及我想在Solr而不仅仅是数据库中跟踪这个内容的原因是我希望能够将upvotes和downvotes的数量考虑到我的内容中search.

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

我意识到解决方案可能需要不同的数据布局,或者可能需要多个索引(尽管我不知道你是否可以在solr内核中查询/得分).

有人能提供任何有关如何解决这个问题的建议吗?

Dor*_*rin 4

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

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

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

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

稍后编辑:

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

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

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