1

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

目前,我们在索引中保持扁平数据。例如:

Itemid, Companyname, Username, Status

一旦项目的状态改变,例如从 Received 到 Sold,我们调用 solr api 来更新记录。一切运作良好。我们有实时更新索引,报告效果很好。

问题 1:现在假设用户将公司名称从 A 公司更新为 B 公司,或者用户名从 Mike 更新为 Jimmy,我们应该如何处理这个问题?

我的想法

  1. 监听用户和公司更新事件并仅更新名称 = 旧名称的 solr 索引

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

问题 2:我正在调用 solr update 来更新每次调用的状态转换索引。现在有更好的方法来做到这一点吗?我是否错过了未来的性能影响或状态转换频率增加时的任何内容?

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

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

4

1 回答 1

0

问题 1:现在假设用户将公司名称从 A 公司更新为 B 公司,或者用户名从 Mike 更新为 Jimmy,我们应该如何处理这个问题?

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

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

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

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

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

问题 2:我正在调用 solr update 来更新每次调用的状态转换索引。现在有更好的方法来做到这一点吗?我是否错过了未来的性能影响或状态转换频率增加时的任何内容?

请参阅问题 1。这是一种替代方式,但不确定是否更快。

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

对我来说是:将新字段添加到 solr,重新启动 solr。我可能会重新索引所有文档。重新索引是必要的,如果现有的文档也获得了额外的信息。

于 2013-07-18T09:04:07.573 回答