点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我们在产品模型中添加了一些自定义属性。
在solr.impex文件中配置了上述属性,如下所示
#定义价格范围集 INSERT_UPDATE SolrValueRangeSet; name [unique = true];限定符;类型; solrValueRanges(⦥ValueRefID) ; lengthRange; length; double; lengthRangeRef1,lengthRangeRef2,lengthRangeRef3,lengthRangeRef4,lengthRangeRef5 #定义价格范围 INSERT_UPDATE SolrValueRange;⦥ValueRefID; solrValueRangeSet(name)[unique = true]; name [unique = true]; from; to ; lengthRangeRef1; lengthRange; 0-49.99; 0; 49.99 ; lengthRangeRef2; lengthRange; 50-99.99; 50; 99.99 ; lengthRangeRef3; lengthRange; 100-149.99; 100; 149.99 ; lengthRangeRef4; lengthRange; 150-199.99; 150; 199.99 ; lengthRangeRef5; lengthRange; 200-300; 200; 300 #其他构面属性 INSERT_UPDATE SolrIndexedProperty; solrIndexedType(identifier)[unique = true]; name [unique = true]; type(code); sortableType(code); currency [default = false]; localized [default = false]; multiValue [default = false] ; facet [default = true]; facetType(code); facetSort(code); priority; visible; useForSpellchecking [default = false]; useForAutocomplete [default = false]; fieldValueProvider; facetDisplayNameProvider; customFacetSortProvider; topValuesProvider; rangeSets(name) ; $ solrIndexedType; 长度;双; ; ; 真实 ; MultiSelectOr; Alpha; 10000; true; ; ; bobstProductSizeValueProvider ;;; defaultTopValuesProvider; lengthRange #方面搜索查询属性 INSERT_UPDATE SolrSearchQueryProperty; indexedProperty(name,solrIndexedType(identifier))[unique = true]; facet [default = true]; facetType(code); priority; facetDisplayNameProvider; facetSortProvider; facetTopValuesProvider; includeInResponse [default = true]; searchQueryTemplate(name,indexed (标识符))[unique = true] [default = DEFAULT:$ solrIndexedType] ; length:$ solrIndexedType ;; MultiSelectOr; 10000 ;;;;;
值提供者为:
公共类ProductLengthValueProvider扩展了AbstractPropertyFieldValueProvider 实现FieldValueProvider,可序列化{ 私有静态最终Logger logger = LoggerFactory.getLogger(BobstProductLengthValueProvider.class); 私有FieldNameProvider fieldNameProvider; @Override public CollectiongetFieldValues(final IndexConfig indexConfig,final IndexedProperty indexedProperty, 最终对象模型)引发FieldValueProviderException { if(ProductModel的模型实例){ 最终的ProductModel产品=(ProductModel)模型; 最终List fieldValues = createFieldValue(product,indexConfig,indexedProperty); 返回fieldValues; }其他{ 抛出新的FieldValueProviderException("无法获得产品模型的长度"); } } 受保护的List createFieldValue(最终ProductModel模型,最终IndexConfig indexConfig, 最终的IndexedProperty indexedProperty){ 最终List fieldValues = new ArrayList (); 最终的字符串限定符= indexedProperty.getName(); 对象结果= null; 结果= modelService.getAttributeValue(model,qualifier); logger.info("长度属性值:...................." +结果+"对于产品代码:" + model.getCode()); if(结果!= null){ addFieldValues(fieldValues,indexedProperty,null,结果); } 返回fieldValues; } 受保护的void addFieldValues(最终列表 fieldValues,最终IndexedProperty indexedProperty, 最终的LanguageModel语言,最终的Object值){ 最终的Collection fieldNames = getFieldNameProvider()。getFieldNames(indexedProperty, (语言== null)? null:language.getIsocode()); for(最终字符串fieldName:fieldNames){ fieldValues.add(new FieldValue(fieldName,value)); } } 公共FieldNameProvider getFieldNameProvider(){ 返回fieldNameProvider; } public void setFieldNameProvider(final FieldNameProvider fieldNameProvider){ this.fieldNameProvider = fieldNameProvider; } }
我已经导入了上面的脚本,并从后台运行了solr索引。 同时将执行索引配置的值提供程序并成功建立索引。 但是,自定义属性构面未显示在店面中。
如果我错过了这里,请告诉我。
任何人都可以帮忙。 如果提供的示例代码将不胜感激。
提前谢谢!
致谢
Praveen
Praveen,
我已经检查了您的代码和配置。
我已经找到了您的ValueProvider正常工作的原因(您可以看到日志条目并查看Solr中的值),但是店面缺少该方面。
您犯了一个错误。 您为Solr提供了价值。 如果使用范围,那是一个错误。
下面的这一行不正确:
对于范围,您需要指定范围名称而不是值。 (您可以在默认实现中找到示例,选中`ProductPriceValueProvider`)
此外,出于您的目的,您根本不需要valueProvider。
在Hybris中,如果您未指定任何提供程序,则将使用" ModelPropertyFieldValueProvider" 。
此提供程序还可以处理范围。 除此之外,它将提供您所需的功能。 看看下面的图片:
如果要使用默认值提供程序,则需要修复rangeSet名称。
由于默认提供程序使用" DefaultRangeNameProvider.getValueRanges"方法查找范围,因此,如果您只有一个范围名称或使用语言ISO代码,则使用值" default"。
您可以在下面查看实现:
限定符-用于默认提供程序-它是语言ISO代码。
但是,我看到您不需要本地化,因此您可以在" qualifier"字段中使用值" default"。
还有一件事。 在涉及尺寸,产品长度,数量等时,最好对属性和变量使用更有意义和独特的名称。
我希望这能回答您的问题。
最诚挚的问候,
伊戈尔
嗨伊戈尔,
非常感谢您的答复。 实际上,我们发现了一个问题,如果索引属性没有sortProvider,那么它将在从solr检索范围的同时清除所有范围值。 因此,我们使用了OTB排序提供程序,现在它可以按预期运行。
是的,您是对的。 我们可以使用' ModelPropertyFieldValueProvider ',但是如果产品模型属性没有值,则返回的空指针异常,因此,我们使用自定义值提供程序进行了空检查。
此致
Praveen
一周热门 更多>