【问题标题】:Solr updating indexSolr 更新索引
【发布时间】:2013-07-18 08:35:32
【问题描述】:

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

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

Itemid, Companyname, Username, Status

只要商品的状态发生变化,例如从 Received 变为 Sold,我们就会调用 solr api 来更新记录。一切运作良好。我们有实时更新索引,报告效果很好。

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

我的想法

  1. 监听用户和公司更新事件,只更新 name = old name 的 solr 索引

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

问题 2:我正在调用 solr update 来更新每次调用的状态转换索引。现在有更好的方法来做到这一点吗?在未来的性能损失或状态转换频率增加时,我是否遗漏了什么?

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

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

【问题讨论】:

    标签: solr


    【解决方案1】:

    问题 1:现在假设用户更新了公司名称 从 A 公司到 B 公司,或者从迈克到吉米的用户名,如何 我们应该处理这个吗?

    我们有一个相同的情况,我们所做的是使用 solr 数据导入处理程序。在 DB 方面,我们添加了一个 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 查询。看看this

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多