【问题标题】:Solr and MySQL, How to keep an updated index, and, is a DB even needed if it's simple?Solr 和 MySQL,如何保持更新的索引,如果数据库很简单,是否还需要数据库?
【发布时间】:2025-12-30 12:45:11
【问题描述】:

我是 Solr 的初学者,请耐心等待。 :)

在我当前的项目中,我有一个非常简单的数据库 - 只有 1 个包含 4 个字段的表:id、name、subject、msg。

据我了解,每次添加(或删除)新记录时,我都需要将该记录添加到索引中,基本上执行两个操作:将记录插入数据库并将其添加到索引中。

这是标准程序,还是有办法指示 Solr 在某个时间间隔或每当有更新时自动重新索引数据库表?

另外,由于表非常简单,将这些信息存储在数据库中是否有意义?考虑到我希望记录可以按名称、主题和 msg 进行搜索,为什么不将其保留在 Solr 索引中?

我的设置是 Java、Hibernate、MySQL 和 Solrj。

【问题讨论】:

    标签: mysql database indexing solr solrj


    【解决方案1】:

    使用或不使用数据库实际上归结为您希望保留和增长这些数据的时间。破坏整个 Solr 索引(并丢失所有数据)比破坏整个数据库要容易得多。此外,Solr 不支持在不从新索引开始的情况下修改模式。例如,您可以添加另一个字段就好了,但您不能在不清除索引的情况下更改字段的名称或类型。

    如果您确实使用数据库,您可以使用DataImportHandler 将 Solr 设置为直接从数据库索引。对于您的模式,这应该非常简单,但是随着您的数据库变得越来越复杂,这可能会很快变得痛苦。我认为使用您已经设置的 Hibernate 对象并使用 Solrj 插入它们有一些优势。 DataImportHandler 的另一个痛点是它完全使用 http 进行控制。因此,您需要使用wgetcurl 管理单独的 cron 作业(或其他一些代码)来处理调度。

    【讨论】:

      【解决方案2】:

      我认为数据库有用的唯一原因是它具有更好的事务支持。无论如何,lucene(SOLR的底层引擎)只能允许一个索引器,所以你不能轻易地通过并发修改破坏底层记录。

      就我而言,您不需要数据库。 SOLR 将处理您需要的一切。

      【讨论】: