Фильтр поиска Hibernate не работает с полем Tokenized - PullRequest
1 голос
/ 28 сентября 2011

Я использую Hibernate search 3.3 для поиска по индексу Lucene.У меня есть фильтр, который мне нужно использовать для определенного поля, но я также делаю его TOKENIZED для полнотекстового поиска.Я обнаружил, что когда у меня установлено поле UN_TOKENIZED, фильтр работает, а полнотекстовый поиск - нет, а когда у меня установлено значение TOKENIZED, полнотекстовый поиск работает, а фильтр - нет.

POJO

@Field(name = "owningOrganization", index = Index.UN_TOKENIZED, store = Store.YES)
@FieldBridge(impl = OrganizationNameFieldBridge.class)
public Organization getOwningOrganization()
{

Фильтр

@Factory
public Filter getFilter()
{
    BooleanQuery query = new BooleanQuery();
    Term orgTerm = new Term("owningOrganization", userOrganization);
    Term activeTerm = new Term("currentStateIsActive", "1");
    query.add(new TermQuery(orgTerm), Occur.SHOULD);
    query.add(new TermQuery(activeTerm), Occur.SHOULD);
    return new CachingWrapperFilter(new QueryWrapperFilter(query));
}

Когда я ввожу условия поиска owningOrganization:"This is the exact value of an organization", я не получаю результатов, но фильтр работает как нужно.И наоборот, когда я переключаю его на TOKENIZED.

Есть предложения?

1 Ответ

2 голосов
/ 29 сентября 2011

Вы должны проиндексировать поле дважды, один раз для поиска (анализа) и один раз для фильтрации.По умолчанию при использовании TermQuery анализ не применяется.Он ищет в индексе указанный термин.

@Fields({
   @Field(name = "owningOrganization_untokenized", index = Index.UN_TOKENIZED),
   @Field(name = "owningOrganization", index = Index.TOKENIZED, store = Store.YES
   }
)
public Organization getOwningOrganization(){
}

При таком подходе у вас есть поле организации-владельца, имеющее токены и токены.Вам просто нужно использовать правильное имя поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...