我是Hibernate Search方面的新手。我正在使用方面,我注意到您只能返回value
fieldName
http://docs.jboss.org/hibernate/search/4.2/api/
我遇到的问题与我的标准分析器以小写字母索引我的值有关。到目前为止,一切都很好,直到我需要显示数据。
如何从原始案例中的facet返回值,例如Ford
,Chevrolet
等,而不是ford
,chevrolet
?
通过从值返回pk并从数据库构建实际对象,是否有一种有效的方法从数据库中获取值?或者是否建议以原始格式将值存储在索引中并执行getFacetQuery来获取它?我对 getFacetQuery 一无所知,所以这可能是不可能的。
例如
@Entity
public class Make {
@Field(store = Store.no)
private String name
}
值
database: Chevy|Ford
index: chevy|ford
面
public FacetingRequest getMakeFacetRequest(QueryBuilder builder) {
return builder.facet()
.name("make")
.onField("make.name")
.discrete()
.orderedBy(FacetSortOrder.FIELD_VALUE)
.includeZeroCounts(false)
.maxFacetCount(10)
.createFacetingRequest();
}
结果
chevy|ford
但是我想从数据库中获取原始案例。
请推荐最佳做法。谢谢。
答案 0 :(得分:1)
看起来我的问题的解决方案是为我的索引提供另一个未分析的字段。实施例
实体
private class Make {
@Fields({
@Field(name = "name", analyzer = @Analyzer(definition = "searchtokenanalyzer")),
@Field(name = "label", analyze = Analyze.NO)
})
private String name;
}
分面查询
@Override
public FacetingRequest getMakeFacetRequest(QueryBuilder builder) {
FacetingRequest facetingRequest = builder.facet()
.name("make")
.onField("make.label")
.discrete()
.orderedBy(FacetSortOrder.FIELD_VALUE)
.includeZeroCounts(true)
.maxFacetCount(10)
.createFacetingRequest();
return facetingRequest;
}