Hibernate Search facet以小写形式返回值

时间:2014-09-04 13:47:50

标签: java lucene hibernate-search

我是Hibernate Search方面的新手。我正在使用方面,我注意到您只能返回value

fieldName

http://docs.jboss.org/hibernate/search/4.2/api/

我遇到的问题与我的标准分析器以小写字母索引我的值有关。到目前为止,一切都很好,直到我需要显示数据。

如何从原始案例中的facet返回值,例如FordChevrolet等,而不是fordchevrolet

通过从值返回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

但是我想从数据库中获取原始案例。

请推荐最佳做法。谢谢。

1 个答案:

答案 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;
    }