Java 我可以将一个值的列表放入Solr中的多值提供程序中吗?
我试图在Solr中加入一个具有动态值的多值提供者。在中,我发现了这样的解释:“如果为true,则表示单个文档可能包含此字段类型的多个值”。当我尝试将字段值列表与多个值放在一起时,我成功了,但当我尝试模拟一个值列表时,什么都没有发生 我的代码如下:Java 我可以将一个值的列表放入Solr中的多值提供程序中吗?,java,solr,hybris,Java,Solr,Hybris,我试图在Solr中加入一个具有动态值的多值提供者。在中,我发现了这样的解释:“如果为true,则表示单个文档可能包含此字段类型的多个值”。当我尝试将字段值列表与多个值放在一起时,我成功了,但当我尝试模拟一个值列表时,什么都没有发生 我的代码如下: public class ArezzoCoCategoriesAvailableValueProvider extends AbstractPropertyFieldValueProvider implements FieldValueProvider
public class ArezzoCoCategoriesAvailableValueProvider extends AbstractPropertyFieldValueProvider implements FieldValueProvider,
Serializable {
private static final Logger LOG = Logger.getLogger(ArezzoCoCategoriesAvailableValueProvider.class);
private FieldNameProvider fieldNameProvider;
private ArezzoCoCategoryService categoryService;
private UrlResolver<CategoryModel> categoryModelUrlResolver;
private final Locale locale = new Locale("pt", "BR");
@Override
public Collection<FieldValue> getFieldValues(IndexConfig indexConfig, IndexedProperty indexedProperty, Object model) throws FieldValueProviderException {
if (model instanceof CategoryModel) {
final String fieldName = getFieldNameProvider().getFieldName(indexedProperty, null, FieldNameProvider.FieldType.INDEX);
List<FieldValue> values = new ArrayList<>();
CategoryModel category = (CategoryModel) model;
String categoryUrl = getCategoryModelUrlResolver().resolve(category);
String categoryName = category.getName(locale);
if (StringUtils.isEmpty(categoryName) || StringUtils.isEmpty(categoryUrl)) {
LOG.error("The cateogry with code: " + category.getCode() + " has problems with Name or Url.");
return values;
}
CategoryEntryData categoryEntry = createNewCategoryEntryData(categoryName, categoryUrl);
values.add(new FieldValue(fieldName, getJsonObject(categoryEntry, LOG)));
if (category.getBcMainCategory() > 0) {
List<CategoryModel> filterCategories = getCategoryService().getFilterCategoriesWithProductsInCommon(category, category.getCatalogVersion());
filterCategories.forEach(cat -> {
CategoryEntryData categoryEntryData = createNewCategoryEntryData(createNameWithFilter(categoryName, cat.getName(locale), getConnectionTerm(cat.getSupercategories())), createUrlWithFilter(categoryUrl, cat));
values.add(new FieldValue(fieldName, getJsonObject(categoryEntryData, LOG)));
});
}
return values;
} else {
throw new FieldValueProviderException("Cannot Generate url for this specific category");
}
}
public FieldNameProvider getFieldNameProvider() {
return fieldNameProvider;
}
public void setFieldNameProvider(FieldNameProvider fieldNameProvider) {
this.fieldNameProvider = fieldNameProvider;
}
public ArezzoCoCategoryService getCategoryService() {
return categoryService;
}
public void setCategoryService(ArezzoCoCategoryService categoryService) {
this.categoryService = categoryService;
}
public UrlResolver<CategoryModel> getCategoryModelUrlResolver() {
return categoryModelUrlResolver;
}
public void setCategoryModelUrlResolver(UrlResolver<CategoryModel> categoryModelUrlResolver) {
this.categoryModelUrlResolver = categoryModelUrlResolver;
}
Solr版本:7.1.0
Hybris版本:6.6.0.17
所以,我的问题是:我可以在Solr中的多值提供程序中放置一个值的列表吗?我配置属性时出错了
解决方案:
上面的代码没有错。错误在方法
getJsonObject(…)
上,我解决了。好的,如果有人需要帮助来创建具有多值的提供程序,这就是一个例子。从Solr方面来说,在多值字段列表中使用单个值没有错,因此至少在Solr方面是正确支持的。我不熟悉Hybris如何与Solr集成。你能告诉我们你在Solr索引中搜索的代码吗?看看你有什么参数。你能分享你正在使用的小补丁吗?e、 g.1905.15?同样,同意马菲克的观点。共享ArezzocCategoriesAvailableValueProvider的Java代码。这看起来是自定义的,而不是OOTB。当然,是用代码更新的
INSERT_UPDATE SolrIndexedProperty; solrIndexedType(identifier)[unique = true]; name[unique = true] ; type(code); sortableType(code); currency[default = false]; localized[default = false]; multiValue; useForSpellchecking[default = false]; useForAutocomplete[default = false]; fieldValueProvider; valueProviderParameter;displayName[lang=pt];displayName[lang=en];ftsQuery;ftsQueryBoost;ftsWildcardQuery;ftsWildcardQueryBoost;ftsPhraseQuery;ftsPhraseQueryBoost;includeInResponse[default = true];
; $solrIndexedType ; categories_available ; string ; ; ; true;true;true;true; arezzoCoCategoriesAvailableValueProvider ; ;Categorias ;Categories ;true ;100,00 ;true ;50,00;true;25,00 ;