Атрибуты Solr не дают ожидаемых результатов
Я добавил новые атрибуты в свой 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 ответа
Похоже, главная проблема в том, что ваш sale
поле не является фасетом, и, следовательно, оно не добавляется в результирующий поисковый запрос SOLR.
Кроме того, как уже сказал Stretch, ваш код будет отфильтровывать продаваемые продукты не только по результатам предложений, но и по результатам обычного текстового поиска. Я не думаю, что это то, чего вы хотите достичь.
поскольку SearchPageController
использует один и тот же метод обслуживания как для текстового поиска, так и для автозаполнения предложений, возможным решением этой проблемы может быть введение отдельного фасада (или, может быть, достаточно метода вспомогательного контроллера) для предложений. И вы также можете использовать DefaultSolrProductSearchService.searchAgain(SolrSearchQueryData, PageableData)
сервисный метод для комплексной фильтрации.
В общем, вы должны расширить это через Конвертер / Популяторы, а не через Сервис.
Если вам не нужны эти продукты в предложениях, но вы хотите, чтобы они были в результатах, то, что вы пытались кодировать выше, неверно. Код выше, кажется, пытается отфильтровать их от всех результатов.