Solr属性未给出预期结果

时间:2015-06-22 11:34:05

标签: solr hybris

我在Solr.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; sale             ;boolean;            ;    ;    ;    ;    ;    ;

并覆盖textSearch方法如下所示:

 public class DefaultCustomSolrProductSearchService <ITEM> extends DefaultSolrProductSearchService 
 {
     @Override
     public ProductCategorySearchPageData<SolrSearchQueryData, ITEM, CategoryModel> textSearch(
             String text, PageableData pageableData) {
         SolrSearchQueryData searchQueryData = createSearchQueryData();
         searchQueryData.setFreeTextSearch(text);
         List<SolrSearchQueryTermData> searchTermList = new ArrayList<SolrSearchQueryTermData>();
         SolrSearchQueryTermData searchTerm = new SolrSearchQueryTermData();
            searchTerm.setKey("sale");
         searchTerm.setValue(Boolean.FALSE.toString());
         searchTermList.add(searchTerm);
         searchQueryData.setFilterTerms(searchTermList);
         return super.doSearch(searchQueryData, pageableData);
     }

2 个答案:

答案 0 :(得分:2)

看起来主要问题是您的sale字段不是方面,因此它不会添加到生成的SOLR搜索查询中。

此外,正如Stretch所说,您的代码不仅会根据建议结果过滤掉销售产品,还会从常规文本搜索结果中过滤掉销售产品。我认为这不是你想要达到的目标。

由于SearchPageController对文本搜索和自动填充建议使用相同的服务方法,因此可能的解决方案可能是引入单独的外观(或者可能是控制器帮助方法就足够了)来提供建议。您还可以使用DefaultSolrProductSearchService.searchAgain(SolrSearchQueryData, PageableData)服务方法进行复杂过滤。

答案 1 :(得分:0)

一般情况下,您应该通过转换器/填充程序扩展它,而不是通过服务。

如果您不希望在建议中使用这些产品,但是您确实希望将它们放在结果中,那么您尝试编码的内容不正确。上面的代码似乎试图从所有结果中过滤它们。