2011-06-14 54 views
3

我正在使用hibernate搜索3.4,我遇到了一个小问题。我有一个我正在尝试使用的筛选器(CourseStatusFilterFactory),但每次启用它时,都不会返回任何结果。我有另一个过滤器没有问题(DeletedFilterFactory),所以我不知道问题是什么。Hibernate搜索筛选器没有预期的结果使用枚举

这里是对象,我试图寻找:

@Entity 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
@Indexed 
@FullTextFilterDefs({ 
    @FullTextFilterDef(name = "statusFilter", impl = CourseStatusFilterFactory.class, cache = FilterCacheModeType.NONE), 
    @FullTextFilterDef(name = "deletedCourse", impl = DeletedFilterFactory.class, cache = FilterCacheModeType.NONE)}) 
public class Course extends LightEntity implements Serializable { 

    private static final long serialVersionUID = 21L; 
    @Id 
    @DocumentId 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Field(name = "title", index = Index.TOKENIZED, store = Store.YES) 
    private String title; 
    @Field(name = "coursestatus", index = Index.TOKENIZED, store = Store.YES) 
    @Enumerated(EnumType.STRING) 
    private CourseStatus status;} 

任我FilterFactory:

public class CourseStatusFilterFactory { 

private CourseStatus status; 

public void setStatus(CourseStatus status) { 
    this.status = status; 
} 

@Key 
public FilterKey getKey() { 
    StandardFilterKey key = new StandardFilterKey(); 
    key.addParameter(status); 
    return key; 
} 

@Factory 
public Filter getFilter() { 
    String statusString = new EnumBridge().objectToString(this.status); 
    Query query = new TermQuery(new Term("coursestatus", statusString)); 
    CachingWrapperFilter cachingWrapperFilter = new CachingWrapperFilter(new QueryWrapperFilter(query)); 
    return cachingWrapperFilter; 
}} 

,并让我的过滤器:

persistenceQuery.enableFullTextFilter("statusFilter").setParameter("status", CourseStatus.PUBLISHED); 

当调试代码,我可以看到,我的查询过滤器确实设置为“coursestatus:PUBLISHED”,但我仍然有0个结果,甚至尽管应该有几十个。

任何想法从哪里开始?

回答

3

感谢hibernate forum中的一些人的帮助,我解决了这个问题。

我需要改变

@Field(name = "coursestatus", index = Index.TOKENIZED, store = Store.YES) 

@Field(name = "coursestatus", index = Index.UN_TOKENIZED, store = Store.YES)