假设我有一个要求,即我不想在具有特定属性值的Hybris
前端上搜索产品。即使Hybris SOLR index
中存在以下产品。
如何解决这个问题?
答案 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>