禁用在具有特定属性值的Hybris前端上搜索产品

时间:2018-02-28 18:52:47

标签: solr hybris

假设我有一个要求,即我不想在具有特定属性值的Hybris前端上搜索产品。即使Hybris SOLR index中存在以下产品。

如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

应编制索引的产品由灵活的搜索查询定义。

您可以导航到hmc/backoffice,在System/Facet Search/Indexed Types中找到它们。选择您的索引类型。在那里,您可以找到完整和更新查询

完整查询由Full SolR Indexer CronJob使用,Update SolR Indexer CronJob每晚在默认情况下运行并完全重新创建SolR索引。更新查询类似地由WHERE {sl:modifiedtime} >= ?lastIndexTime使用,SELECT {pk} FROM {Product} 每小时默认运行,只更新两者之间已更改的产品。因此,您会在更新查询中找到类似SELECT {pk} FROM {Product} WHERE {myAttribute} LIKE 'index this product' 的内容,这在完整查询中是缺失的。

您可以按照所需的各种方式更改查询。例如。假设您的查询是:

Solr Indexer Cronjobs

将其更改为

System/Facet Search/Facet Search Config

PS:在您关联的构面搜索配置(SolR)上找到{{1}}。

PPS:还有一个删除查询,您可以在其中定义应从{{1}}索引中删除的产品。

答案 1 :(得分:2)

我可以想到使用Solr在前端实现产品可见性的两种方法。

<强> 1。仅为您需要的产品编制索引。正如@Johannes Nolte所说,调整完整和更新索引查询

这里的问题是这样就完全从搜索中删除了产品。如果您需要根据其他属性显示/隐藏产品,则无法执行此操作。

其他方式是

<强> 2。在将实际Solr查询发送到Solr服务器之前添加搜索过滤器

假设您要根据productType(类型A和类型B)显示/隐藏产品

用户1有资格查看A类产品,用户2有资格查看B类产品。

您需要首先索引productType属性并使其成为facet = true。确保选择visible = false,以便在店面的facet中不显示此属性。

请参阅OOTB SearchFiltersPopulator类,您将了解如何在发送到Solr Server进行搜索之前在Solr查询中添加动态过滤器。

同样您可以创建自己的filterPopulator,例如 MySearchFiltersPopulator ,其中包含您的自定义可见性逻辑。

if Current_User is User 1
  target.getSearchQuery().addFacetValue("productType", "Type A");
else Current_User is User 2
  target.getSearchQuery().addFacetValue("productType", "Type B");

最后在commerceSearchQueryPageableConverter链中添加自定义填充程序。

<bean parent="modifyPopulatorList">
    <property name="list" ref="commerceSearchQueryPageableConverter" />
    <property name="add" ref="mySearchFiltersPopulator" />
</bean>