我是索尔的初学者,所以请耐心等待。 :)
在我目前的项目中,我有一个非常简单的数据库 - 只有一个包含4个字段的表:id,name,subject,msg。
我理解的方式是,每次添加(或删除)新记录时,我都需要将该记录添加到索引中,基本上执行两个操作:将记录插入数据库并将其添加到索引中。
这是标准程序,还是有办法指示Solr在某个时间间隔或有更新时自动重新索引数据库表?
此外,由于表格非常简单,将此信息存储在数据库中是否有意义?为什么不把它保留在Solr索引中,考虑到我希望记录可以通过名称,主题和消息进行搜索?
我的设置是Java,Hibernate,MySQL和Solrj。
答案 0 :(得分:5)
使用数据库与否实际上归结为您希望保留多长时间并增长此数据。破坏整个Solr索引(并丢失所有数据)比破坏整个数据库要容易得多。此外,Solr不支持在不使用新索引的情况下修改模式。例如,您可以添加另一个字段,但是如果不删除索引,则无法更改字段的名称或类型。
如果您使用数据库,可以使用DataImportHandler将Solr设置为直接从数据库编制索引。对于您的架构,这应该非常简单,但随着您的数据库变得更加复杂,这会很快变得痛苦。我认为使用已经设置的Hibernate对象并使用Solrj插入它们有一些优势。 DataImportHandler的另一个难点在于它完全由http控制。因此,您需要使用wget
或curl
来管理单独的cron作业(或其他一些代码)来处理调度。
答案 1 :(得分:-1)
我看到数据库可能有用的唯一原因是它有更好的事务支持。无论如何lucene(SOLR的底层引擎)只能允许一个索引编写器,因此你不能通过并发修改轻易破坏底层记录。
就我而言,您不需要数据库。 SOLR将处理您需要的一切。