在Hibernate Search 5.3中引入了@Facet注释,必须使用它来将字段存储为Facet。我想知道的是,如果它们是一种在自定义字段桥中添加字段作为构面的方法,而不使用@Facet注释。
我的用例是我有一个带有类别的产品,类别树路径存储为字符串,如此
"0/10/100/1000"
我希望能够使用构面获得某个类别中所有产品的数量。类别的计数应包括所有子类别的计数,因此每个产品应为每个父类别都有一个方面
所以我想做的是:
public class CategoryPathFacetFieldBridge implements FieldBridge {
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
String[] pathHolder = ((String)value).split("/");
for (String id : pathHolder) {
Field fieldForFacet = new Field(name, id, Field.Store.YES, Field.Index.NOT_ANALYZED);
document.add(fieldForFacet);
}
}
}
我实际上已经提出了一种解决方法,但我首选的方法是使用上面的自定义字段桥。有谁知道这在hibernate search 5.3+中是否可行?
我的解决方法如下:
public void setCategoryPath(String categoryPath) {
this.categoryPath = categoryPath;
String[] pathHolder = categoryPath.split("/");
for (String id : pathHolder) {
this.categoryPathList.add(new CategoryWrap(id));
}
}
@Transient
@IndexedEmbedded
@OneToMany
public List<CategoryWrap> getCategoryPathList() {
return this.categoryPathList;
}
class CategoryWrap{
@Field(analyze = Analyze.NO)
@Facet(encoding = FacetEncodingType.STRING)
String categoryId;
public CategoryWrap(String categoryId) {
this.categoryId = categoryId;
}
}