想要在hybris for solr中对valueProvider进行澄清

时间:2017-01-26 04:40:45

标签: java solr hybris

希望通过一些例子了解hybris中solber的价值提供者的确切用法。我正在hybris开展一个项目,我必须在Product中添加新属性,并希望在产品列表页面中将其显示为一个位置。

2 个答案:

答案 0 :(得分:2)

使用ValueProvider将复杂对象(例如Brand,Price,Unite,...)转换为Solr可理解的简单原始数据(string,int,double,...)

例如:

  • 品牌将由提供商转换为Brand.name
  • 提供商将价格转换为Price.formattedValue

作为示例,假设您的新属性为单位,例如:

<强> 1。首先,您必须创建一个ProductUnitValueProvider

public class ProductUnitValueProvider extends AbstractPropertyFieldValueProvider implements Serializable, FieldValueProvider {
    @Override
    public Collection<FieldValue> getFieldValues(final IndexConfig indexConfig, final IndexedProperty indexedProperty, final Object model) throws FieldValueProviderException
    {
        if (model instanceof ProductModel)
        {
            //Product model
            final ProductModel product = (ProductModel) model;

            //List of fieldValues to be inflated and returned
            final Collection<FieldValue> fieldValues = new ArrayList<FieldValue>();

            if (product.getUnit() != null)
            {
                //Create fieldValue, just to make it simple as possible however i would perfer to use FieldNameProvider.getFieldNames() instead, to retrieve all FieldNames for this indexedProperty
                String unitName = product.getUnit().getCode();
                fieldValues.add(new FieldValue(indexedProperty.getName(), unitName));
            }
            //Send FieldValues, to be indexed by Solr
            return fieldValues;
        }
        else
        {
            throw new FieldValueProviderException("Error message!");
        }
    }
}

<强> 2。注册您的提供商以便为Spring所知

<bean id="productUnitValueProvider" class="xx.yy.zz.ProductUnitValueProvider" />

第3。最后将valueProvider与SolrIndexedProperty相关联,并使用impex将其添加到SolrIndexType

$solrIndexedType=xxx

INSERT_UPDATE SolrIndexedProperty;solrIndexedType(identifier)[unique=true];name[unique=true];type(code);sortableType(code);currency[default=false];localized[default=false];multiValue[default=false];useForSpellchecking[default=false];useForAutocomplete[default=false];fieldValueProvider;valueProviderParameter
;$solrIndexedType; unit; string ; ; ; ; ; ;  ;productUnitValueProvider;

修改:在此处查找更多内容 - &gt; https://www.stackextend.com/hybris/index-a-custom-product-property-with-solr-in-hybris/

答案 1 :(得分:0)

想象一下,您拥有产品的动态属性,而不是原始ProductModel的一部分。例如&#34;商店里剩下的商品很少&#34;在类别页面上签署产品。在您的产品详细信息页面上,您可以根据您的库存水平和其他属性计算出来并将其显示给客户。但是,如果您想对类别页面上的每个产品执行此操作,则需要花费大量时间。因此,我们的想法是创建一个ValueProvider,它将在您启动SOLR索引并将其作为索引(缓存)字段添加到其中时计算此动态属性。因此,在您的类别页面上,您可以使用此属性而无需再次计算。 另请参阅@Sanchit Khera答案了解详情。