Рекомендации по частичному индексу SOLR для обновления атрибутов, которые часто изменяются в Hybris - PullRequest
0 голосов
/ 06 сентября 2018

Мой сценарий такой. Индексирование Solr происходит для продукта, и затем статус утверждения продукта становится неутвержденным из бэк-офиса. После этого при поиске связанных слов, которые помещены в описание продукта или непосредственно код продукта с веб-сайта, вы получаете сообщение об ошибке сервера, поскольку продукт, который был не одобрен, все еще помещается в solr.

Если вы выполняете какой-либо тип индексации из backoffice вручную, он снова работает. Но это не хорошее решение, так как может быть много продуктов, чей статус изменился или это не решение, которое происходит мгновенно. Если вы используете cronjob для индексации, это снова не быстрое решение. Вы получаете ошибку сервера, пока cronjob не начнет работать.

Я хотел бы мгновенно обновить индекс solr для атрибутов, которые часто изменяются, таких как цена, состояние и т. Д. Например, когда атрибут изменяется, это хороший способ немедленно запустить частичный индекс в java код? Если это так, как? (по IndexerService?). Для другого решения: лучше сделать запрос http для атрибута? Таким образом, я ищу лучшее решение для выполнения частичного индекса. Есть идеи?

1 Ответ

0 голосов
/ 07 сентября 2018

Для этого случая вам нужно написать две новые важные части SOLR-Configuration:

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 Ответ: Вы должны написать новый исполнитель solrIndexerQuery, который может запускаться каждые 5 секунд

...