Solr更新索引

时间:2013-07-18 08:35:32

标签: solr

我们索引的数据库中有大约1000万条记录,我们很高兴这样做,因为我们通过从solr而不是db获取记录来看到高性能优势。 此数据用于报告。

目前我们在索引中保留平面数据。例如:

Itemid, Companyname, Username, Status

一旦项目状态从Received变为Sold,我们就会调用solr api来更新记录。一切都很好。我们实时更新了索引,报告效果很好。

问题1:现在将来可以说,用户将公司名称从公司A更新为公司B,或者也许是从Mike到Jimmy的用户名,我们如何处理这个?

我的想法

  1. 收听用户和公司更新事件,并仅更新名称=旧名称

  2. 的solr索引
  3. 将公司和用户的ID保留在索引中而不是名称中。从solr获取记录后,再次点击数据库以获取更新的名称。这将是一种混合方法,其中主要字段来自索引,只有这些字段来自db表

  4. 问题2:我正在调用solr update来更新每个调用的状态转换索引。现在有更好的方法吗?我是否会在未来的性能损失或状态转换频率增加时遗漏任何内容?

    问题3:可以说,将来需要在报告中再显示一个尚未编入索引的列。什么是标准可接受的方式?

    请在此分享您的专家建议。

1 个答案:

答案 0 :(得分:0)

  

问题1:现在将来可以说,用户更新了公司名称   从公司A到公司B,或者从Mike到Jimmy的用户名,如何   我们想要处理这件事吗?

我们有一个相同的案例,我们所做的是使用solr数据导入处理程序。在数据库方面,我们添加了LAST_MODIFIED列。在每次更新行时,DB会自动将LAST_MODIFIED`时间戳更改为“now”。

在Solr Side,我们通过调用Data Import Request Handler来运行数据导入作业,如下所示:

http://solrhost:8888/solr/mycore/dataimport?command=full-import&clean=false&optimize=false

在这种情况下,数据导入请求处理程序在LAST_MODIFIED上运行带有where子句的数据库查询。看看this

为此,您必须在solr上定义唯一ID,例如Itemid

  

问题2:我正在调用solr update来更新状态索引   每次通话的过渡。现在有更好的方法吗?上午   我在将来或什么时候在性能损失方面遗漏了什么   状态转换的频率会增加吗?

参见问题1.这是另一种方式,但不确定,如果这更快。

  

问题3:让我们说,将来需要再展示一个要求   报告中尚未编入索引的列。什么是标准   这样做的可接受的方式?

对我而言:将新字段添加到solr,重新启动solr。我可能会重新索引所有文档。如果退出文档还获得其他信息,则重新索引是必要的。