Solr 属性未给出预期结果
Solr attributes not giving Expected results
我根据此属性在我的 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);
}
一般来说,您应该通过 Converter/Populators 而不是通过服务来扩展它。
如果您不希望这些产品出现在建议中,但您确实希望它们出现在结果中,那么您在上面尝试编写的代码是不正确的。上面的代码似乎试图从所有结果中过滤它们。
看起来主要问题是您的 sale
字段不是分面,因此它不会添加到生成的 SOLR 搜索查询中。
此外,正如 Stretch 所说,您的代码不仅会从建议结果中过滤掉促销产品,还会从常规文本搜索结果中过滤掉促销产品。我不认为这是你想要实现的。
由于 SearchPageController
对文本搜索和自动完成建议使用相同的服务方法,可能的解决方案可能是为建议引入一个单独的外观(或者控制器辅助方法就足够了)。并且您还可以使用DefaultSolrProductSearchService.searchAgain(SolrSearchQueryData, PageableData)
服务方法进行复杂的过滤。
我根据此属性在我的 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);
}
一般来说,您应该通过 Converter/Populators 而不是通过服务来扩展它。
如果您不希望这些产品出现在建议中,但您确实希望它们出现在结果中,那么您在上面尝试编写的代码是不正确的。上面的代码似乎试图从所有结果中过滤它们。
看起来主要问题是您的 sale
字段不是分面,因此它不会添加到生成的 SOLR 搜索查询中。
此外,正如 Stretch 所说,您的代码不仅会从建议结果中过滤掉促销产品,还会从常规文本搜索结果中过滤掉促销产品。我不认为这是你想要实现的。
由于 SearchPageController
对文本搜索和自动完成建议使用相同的服务方法,可能的解决方案可能是为建议引入一个单独的外观(或者控制器辅助方法就足够了)。并且您还可以使用DefaultSolrProductSearchService.searchAgain(SolrSearchQueryData, PageableData)
服务方法进行复杂的过滤。