2014-09-04 48 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; 
    }