想通过一些示例了解 hybris for solr 中 value provider 的确切用法。我正在 hybris 中开展一个项目,我必须向 Product 添加新属性,并希望将其显示为产品列表页面中的 facate。

最佳答案

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

例如:

  • Brand 由供应商转换为 Brand.name
  • 由提供者转换为 Price.formattedValue 的价格

  • 例如,假设您的新属性是 Unit 例如:

    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;
    

    编辑: 在这里找到更多 -> https://www.stackextend.com/hybris/index-a-custom-product-property-with-solr-in-hybris/

    关于java - 想要澄清 hybris for solr 中的 valueProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41867001/

    10-11 19:53