2014-09-04 70 views
0

我是Hibernate搜索构面的新手。我使用方面,我注意到你只能返回的fieldNameHibernate搜索构面以小写形式返回值

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

时遇到的问题与我的标准分析仪小写索引我的价值观做value。到目前为止,一切都很好,直到我需要显示数据。

如何退还偏离小面在它的原始情况的值,例如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

它看起来像我的问题的解决方案是提供另一个领域,我的索引,没有分析。实施例

实体

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