我的情况是这样的。 对产品进行Solr索引编制,然后使产品批准状态未经后台批准。之后,当您搜索放置在产品描述中的相关词或直接从网站搜索产品代码时,由于未批准的产品仍放置在solr中,您会收到服务器错误。
如果您手动从Backoffice执行任何类型的索引编制,它将重新起作用。但这不是一个好的解决方案,因为可能会有很多产品的状态发生变化,或者这不是立即发生的解决方案。如果您使用cronjob进行索引,那将不是一个快速的解决方案。在cronjob开始工作之前,您会收到服务器错误。
我想立即更新频繁更改的属性(例如价格,状态等)的solr索引。例如,当属性发生更改时,这是立即启动部分索引的好方法吗? Java代码?如果是,怎么办? (通过IndexerService?)。对于另一个解决方案,发出http请求以对该属性进行solr更好吗? 总而言之,我正在寻找执行部分索引的最佳解决方案。 有什么想法吗?
答案 0 :(得分:0)
在这种情况下,您需要编写两个新的重要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::您必须编写一个新的性能solrIndexerQuery,它可能每5秒触发一次