Фильтр поиска Hibernate не имеет ожидаемых результатов с Enum - PullRequest
3 голосов
/ 15 июня 2011

Я использую Hibernate Search 3.4, и я столкнулся с небольшой проблемой. У меня есть фильтр, который я пытаюсь использовать (CourseStatusFilterFactory), но каждый раз, когда я его включаю, результаты не возвращаются. У меня есть другой фильтр, который работает без проблем (DeletedFilterFactory), поэтому я не уверен, в чем проблема.

Вот объект, который я пытаюсь найти:

@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 результатов, хотя их должно быть несколько.

Есть идеи, с чего начать?

1 Ответ

3 голосов
/ 17 июня 2011

Благодаря помощи некоторых людей на форуме hibernate мне удалось решить проблему.

Мне нужно было изменить

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

на

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