java - SOLR部分索引的最佳实践,以便更新Hybris中频繁更改的属性

标签 java indexing solr sap-commerce-cloud

我的场景是这样的。 Solr 索引发生在产品上,然后产品批准状态将由后台变为未批准。此后,当您搜索放置在产品描述中的相关词或直接从网站上搜索产品代码时,您会收到服务器错误,因为未批准的产品仍然放置在 solr 中。

如果您从后台手动执行任何类型的索引,它会再次起作用。但这不是一个好的解决方案,因为可能有很多产品的状态发生了变化,或者这不是一个立即发生的解决方案。如果您使用 cronjob 进行索引,这又不是一个快速的解决方案。在 cronjob 开始工作之前,您会收到服务器错误。

我想立即更新 solr 索引,以获取经常更改的属性,如价格、状态等。 例如,当属性更改时,在 java 代码中立即启动部分索引是一个好方法吗?如果是的话,怎么样? (由 IndexerService 提供?)。对于另一个解决方案,向 solr 发出 http 请求来获取属性是否是一个更好的主意? 总之,我正在寻找执行部分索引的最佳解决方案。 有什么想法吗?

最佳答案

对于这种情况,您需要编写两个新的重要 SOLR 配置部分:

1) 触发索引的新SOLR-Cronjob

2) 一个新的SOLR-IndexerQuery,用于根据您的特殊要求进行索引。

当您查看 hybris 的默认内容时,您会看到:

INSERT_UPDATE CronJob;code[unique=true];job(code);singleExecutable;sessionLanguage(isocode);active;
;backofficeSolrIndexerUpdateCronJob;backofficeSolrIndexerUpdateJob;false;en;false;

INSERT Trigger;cronJob(code);active;activationTime;year;month;day;hour;minute;second;relative;weekInterval;daysOfWeek;
;backofficeSolrIndexerUpdateCronJob;true;;-1;-1;-1;-1;-1;05;false;0;;

上面这部分是配置作业何时运行。你可以修改他,例如他应该每 5 秒运行一次。

INSERT_UPDATE SolrIndexerQuery; solrIndexedType(identifier)[unique = true]; identifier[unique = true]; type(code); injectCurrentDate[default = true]; injectCurrentTime[default = true]; injectLastIndexTime[default = true]; query; user(uid)   
; $solrIndexedType ; $solrIndexedType-updateQuery ; update ; false ; false ; false ; "SELECT DISTINCT {PK} FROM {Product AS p JOIN VariantProduct AS vp ON {p.PK}={vp.baseProduct}  } WHERE {p.modifiedtime} >= ?lastStartTimeWithSuccess OR {vp.modifiedtime} >= ?lastStartTimeWithSuccess" ; admin

这里的第二部分更为重要。您可以在此处定义应将哪些产品编入索引。在这里您可以看到 UPDATE-Job 正在查找每个已修改的产品。在这里,您可以根据您的特殊要求编写新的FlexibleSearch。

tl;tr Answear: You have to write a new performant solrIndexerQuery that could be trigger every 5 seconds

关于java - SOLR部分索引的最佳实践,以便更新Hybris中频繁更改的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212074/

相关文章:

java - 通知客户端服务器已完成 Firebase 中的处理

postgresql - 缓慢的 Postgres 9.3 查询,再次

ruby-on-rails - 如果 sunspot-solr 不可用,则构建故障保护

java - 如何以 O(n) 的时间复杂度找到总和为 k 的所有子数组?

java - 是否有 Tomcat/Java 的 url 重写引擎?

mysql - 在 mysql join 中使用索引

mysql - 在 MySQL 中的 BigInt 列上建立索引

斯卡拉 : Match of parameter Type

.net - 在 .NET 中使用哪些好的倒排索引库?

java - 从新事件 [Android] 更改 TextView 的文本