自定义属性构面未显示在店面中?

2020-08-20 07:19发布

         点击此处--->   EasySAP.com群内免费提供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 Collection  getFieldValues(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

         点击此处--->   EasySAP.com群内免费提供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 Collection  getFieldValues(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

付费偷看设置
发送
2条回答
d56caomao
1楼-- · 2020-08-20 08:08

Praveen,

我已经检查了您的代码和配置。

我已经找到了您的ValueProvider正常工作的原因(您可以看到日志条目并查看Solr中的值),但是店面缺少该方面。

您犯了一个错误。 您为Solr提供了价值。 如果使用范围,那是一个错误。

下面的这一行不正确:

 fieldValues.add(新的FieldValue(fieldName,值)); 

对于范围,您需要指定范围名称而不是值。 (您可以在默认实现中找到示例,选中`ProductPriceValueProvider`)

 fieldValues.add(新的FieldValue(fieldName,rangeName)); 

此外,出于您的目的,您根本不需要valueProvider。

在Hybris中,如果您未指定任何提供程序,则将使用" ModelPropertyFieldValueProvider" 。

此提供程序还可以处理范围。 除此之外,它将提供您所需的功能。 看看下面的图片:

如果要使用默认值提供程序,则需要修复rangeSet名称。

 INSERT_UPDATE SolrValueRangeSet;名称[unique = true];限定符;类型; solrValueRanges(&ValueRefID)
 ; lengthRange;默认;双精度; lengthRangeRef1,lengthRangeRef2,lengthRangeRef3,lengthRangeRef4,lengthRangeRef5 

由于默认提供程序使用" DefaultRangeNameProvider.getValueRanges"方法查找范围,因此,如果您只有一个范围名称或使用语言ISO代码,则使用值" default"。

您可以在下面查看实现:

 if(限定符== null)
 {
    valueRangeSet =(ValueRangeSet)property.getValueRangeSets()。get(" default");
 }
 其他
 {
    valueRangeSet =(ValueRangeSet)property.getValueRangeSets()。get(qualifier);
    如果(valueRangeSet == null)
    {
       valueRangeSet =(ValueRangeSet)property.getValueRangeSets()。get(" default");
    }
 } 

限定符-用于默认提供程序-它是语言ISO代码。

但是,我看到您不需要本地化,因此您可以在" qualifier"字段中使用值" default"。

还有一件事。 在涉及尺寸,产品长度,数量等时,最好对属性和变量使用更有意义和独特的名称。

我希望这能回答您的问题。

最诚挚的问候,

伊戈尔

哎,真难
2楼-- · 2020-08-20 07:44

嗨伊戈尔,

非常感谢您的答复。 实际上,我们发现了一个问题,如果索引属性没有sortProvider,那么它将在从solr检索范围的同时清除所有范围值。 因此,我们使用了OTB排序提供程序,现在它可以按预期运行。

是的,您是对的。 我们可以使用' ModelPropertyFieldValueProvider ',但是如果产品模型属性没有值,则返回的空指针异常,因此,我们使用自定义值提供程序进行了空检查。

此致

Praveen

一周热门 更多>