Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 索尔索特海布里斯酒店_Sorting_Solr_Hybris - Fatal编程技术网

Sorting 索尔索特海布里斯酒店

Sorting 索尔索特海布里斯酒店,sorting,solr,hybris,Sorting,Solr,Hybris,我有一个供应商,为每个单位的产品提供指数股票,方法如下: for (Map.Entry<B2BUnitModel, Integer> unit : stockByUnit.entrySet() ) { document.addField(indexedProperty, hasStock(unit.getValue()), unitUid(unit.getKey())); } 其中localStockForUnt是SolrIndexedPropert

我有一个供应商,为每个单位的产品提供指数股票,方法如下:

for (Map.Entry<B2BUnitModel, Integer> unit : stockByUnit.entrySet() )
    {
        document.addField(indexedProperty, hasStock(unit.getValue()), unitUid(unit.getKey()));
    }
其中localStockForUnt是SolrIndexedProperty,001和002是单位,true或false是索引值

这是创建它的impex:

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; localStockForUnt       ;boolean ;            ;    ;    ;    ;     ;   ;myResolver;
所以我在hmc中称为“相关性”的“排序”中添加了它,这个“排序”在hmc中只有这个字段

我的疑问是,如何使用localStockForUnt\u 002\u布尔值对结果进行排序?
我确实手动将控制器中的排序设置为测试,我确实将其设置为“相关性”,但由于相关性中使用的字段提供程序(localStockForUnt)索引了两个不同的信息,我如何选择要使用的信息?

实际上,您在这里尝试的操作已经由Hybris启动并在多个情况下使用,例如:

  • 本地化的
    属性,如
    名称
    ,索引为
    名称字符串
  • price
    类似的
    currency
    属性被索引为
    priceValue\u eur\u double
    ,也用于排序
对于
priceValue\u eur\u double
对于
localStockForUnt\u 001\u boolean

priceValue
是字段名称|
localStockForUnt
是字段名称。
eur
是字段限定符|
001
是字段限定符。
double
是字段类型|
boolean
是字段类型

因此,您的案例与这两个示例没有什么不同,因此您只需要知道如何使用已经存在的内容

实际上,这两个例子的工作原理并没有什么神奇之处

  • 首先,将新的布尔
    属性添加到
    SolrIndexedPropertyModel
    中,我们称之为
    isB2bUnit
  • 
    
  • 接下来,您必须在
    索引属性
    dto中添加相同的
    布尔属性
  • 
    
  • 然后您需要重写
    DefaultIndexedPropertyOperator
    它负责将
    SolrIndexedProperty
    转换为
    IndexedProperty
  • 公共类MyIndexedPerpertOperator扩展了DefaultIndexedPertOperator{
    @凌驾
    public void populate(SolrIndexedPropertyModel源、IndexedProperty目标)引发ConversionException{
    超级。填充(源、目标);
    //添加这一行
    target.setIsB2bUnit(source.getIsB2bUnit());
    }
    }
    
    propulator
    注册到弹簧中

    
    
  • 我们的想法是连接到这个方法
    DefaultFieldNameTranslator.translateFromProperty(…)
    ,如果
    Indexedproperty
    isB2bUnit
    TRUE
    ,则强制它将您的特定
    fieldQualifier
    添加到
    fieldName
  • 原始的
    DefaultFieldNameTranslator.translateFromProperty(…)
    如下所示:

    受保护的字符串translateFromProperty(SearchQuery SearchQuery,IndexedProperty IndexedProperty,FieldType FieldType){
    //...
    if(qualifierProvider!=null&&qualifierProvider.canApply(indexedProperty)){
    Qualifier=qualifierProvider.getCurrentQualifier();
    fieldQualifier=限定符!=null?限定符。toFieldQualifier():null;
    }else if(indexedProperty.isLocalized()){
    fieldQualifier=searchQuery.getLanguage();
    }else if(indexedProperty.isCurrency()){
    fieldQualifier=searchQuery.getCurrency();
    }
    //如果在这里,你必须添加你的else!!!
    返回此.fieldNameProvider.getFieldName(indexedProperty、fieldQualifier、fieldType);
    }
    
    因此,创建从
    DefaultFieldNameTranslator
    扩展的
    MyFieldNameTranslator
    ,并覆盖
    translateFromProperty(…)

    注意:
    SomeB2bUnitService
    此服务不是真实的,但它应该能够返回当前的b2bUnit

    公共类MyFieldNameTranslator扩展了DefaultFieldNameTranslator{
    //注射!!
    私有SomeB2bUnitService SomeB2bUnitService;
    @凌驾
    受保护的字符串translateFromProperty(SearchQuery SearchQuery,IndexedProperty IndexedProperty,FieldType FieldType){
    //...
    //...
    else if(indexedProperty.getIsB2bUnit()){
    fieldQualifier=someB2bUnitService.getCurrentB2bUnit().getCode();
    }
    返回此.fieldNameProvider.getFieldName(indexedProperty、fieldQualifier、fieldType);
    }
    }
    
    转换器
    注册到
    弹簧中

    
    
  • 编辑:现在您所要做的就是为
    localStockForUnt
    设置
    isB2bUnit
    true
  • 插入\u更新SolrIndexedProperty;solrIndexedType(标识符)[unique=true];名称[unique=true];类型(代码);伊斯布尼特
    ;$solrIndexedType;本地股票基金;布尔型;真的
    
    注意:一些类和bean可能在Hybris版本之间发生了更改,但概念将保持不变

    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; localStockForUnt       ;boolean ;            ;    ;    ;    ;     ;   ;myResolver;