我们索引的数据库中有大约1000万条记录,我们很高兴这样做,因为我们通过从solr而不是db获取记录来看到高性能优势。 此数据用于报告。
目前我们在索引中保留平面数据。例如:
Itemid, Companyname, Username, Status
一旦项目状态从Received变为Sold,我们就会调用solr api来更新记录。一切都很好。我们实时更新了索引,报告效果很好。
问题1:现在将来可以说,用户将公司名称从公司A更新为公司B,或者也许是从Mike到Jimmy的用户名,我们如何处理这个?
我的想法
收听用户和公司更新事件,并仅更新名称=旧名称
将公司和用户的ID保留在索引中而不是名称中。从solr获取记录后,再次点击数据库以获取更新的名称。这将是一种混合方法,其中主要字段来自索引,只有这些字段来自db表
问题2:我正在调用solr update来更新每个调用的状态转换索引。现在有更好的方法吗?我是否会在未来的性能损失或状态转换频率增加时遗漏任何内容?
问题3:可以说,将来需要在报告中再显示一个尚未编入索引的列。什么是标准可接受的方式?
请在此分享您的专家建议。
答案 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。我可能会重新索引所有文档。如果退出文档还获得其他信息,则重新索引是必要的。