【问题标题】:solr indexing strategysolr 索引策略
【发布时间】:2012-03-13 18:14:44
【问题描述】:

我们在 mongo 中有数百万个文档,我们希望在 solr 上建立索引。显然,当我们第一次这样做时,我们需要索引所有文档。

但在那之后,我们应该只需要在文档发生变化时对其进行索引。做这个的最好方式是什么?我们应该调用 addDocument 然后在 cron 中调用 commit() 吗? addDocument vs commit vs optimize 有什么作用(我使用的是 Apache_Solr_Service)

【问题讨论】:

    标签: solr


    【解决方案1】:

    如果您使用的是 Solr 3.x,您可以forget the optimize,它将所有段合并为一个大段。提交使新的 IndexReaders 可以看到更改;它很昂贵,我不会为您添加的每个文档都调用它。我不会通过 cron 调用它,而是在 solrconfig.xml 中使用 autocommit。您可以根据搜索时等待获取新文档的时间来调整该值。

    【讨论】:

    • 您将如何确定文档是否需要被索引?你会在 mongo 文档 needs_index 上设置一个标志吗?
    【解决方案2】:

    在您执行 commit() 之前,文档实际上不会被添加到索引中 - 它可以回滚。 optimize() 将(表面上;我没有特别好的运气)减少索引的大小(除非索引被优化,否则已删除的文档仍会占用空间)。

    【讨论】:

      【解决方案3】:

      如果您为您的数据库设置了自动提交,那么您可以确保通过更新添加到数据库中的所有文档在自动提交间隔过后都已提交。我使用了 5 分钟的间隔,即使在 5 分钟内发生数千次更新,它也能正常工作。完整的重新索引完成后,我等待 5 分钟,然后告诉人们它已经完成。事实上,当人们问更新进入数据库的速度有多快时,我会告诉他们我们每分钟轮询一次更改,但是存在变量(例如突然的大批量),最好不要指望更新5 或 6 分钟。到目前为止,没有人真正声称企业需要比这更快地更新。

      这是一个 350,000 条记录的数据库,总共大约 10G 的 RAM。

      【讨论】:

        猜你喜欢
        • 2012-05-06
        • 2014-04-02
        • 1970-01-01
        • 2013-07-25
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多