2014-11-11 2 views
0

Я использую Hibernate Lucene для индексации таблицы MOVIE. Я хочу индексировать и искать по столбцу заголовка, включая «the» и «a» как часть поиска. Ex, «последний человек, стоящий», «Самый разыскиваемый человек». «The» и «A» являются релевантными как часть результатов поиска.Поиск Hibernate lucene включает в себя «the» и «a» как часть поиска

Проблема в том, что я использовал index = Index.UN_TOKENIZED в @Field, тогда поиск не может быть выполнен. Если я использовал Index.TOKENIZED, тогда я не могу выполнить поиск с помощью «the» и «a».

Может ли кто-нибудь дать мне руководство? Заранее спасибо.

Ниже приведен фрагмент кода:

@Field (индекс = Index.UN_TOKENIZED, магазин = Store.NO) < < < Я попытался Index.TOKENIZED также. @Column (name = "TITLE") закрытый заголовок строки;

Код для поиска:

@Field(index = Index.UN_TOKENIZED, store = Store.NO) <<< I've tried Index.TOKENIZED also. 

@column (имя = "TITLE") частная строка заголовка;

Код для поиска: FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager (entityManager);

QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory(). BuildQueryBuilder(). ForEntity (Movie.class) .get(); Query luceneQuery = queryBuilder.keyword(). OnField ("title") .matching (title.toLowerCase()). CreateQuery();

return fullTextEntityManager.createFullTextQuery (luceneQuery, Movie.class) .getResultList();

+0

Я думаю, что нашел решение, определив анализатор – user1775967

ответ

0

Я думаю, что это одно решение, определяя анализатор. Это будет означать, но не исключает общих слов «the». Кроме того, в поисковом коде используйте метод QueryBuilder.phrase() вместо ключевого слова(), чтобы поиск выполнялся на основе поисковой фразы.

@AnalyzerDef (имя = "обычай", токенизатор = @TokenizerDef (завод = StandardTokenizerFactory.class), фильтры = { @TokenFilterDef (завод = LowerCaseFilterFactory.class), @TokenFilterDef (завод = SnowballPorterFilterFactory.class, PARAMS = {@Parameter (имя = "язык", значение = "английский")})}) общественного класса Movie {

@Field(index = Index.YES, analyze = Analyze.YES, store = Store.NO) 
@Analyzer(definition="custom") 
private String title; 

... }

Код для поиска: QueryBuilder дь = fullTextEntityMgr.g etSearchFactory() .buildQueryBuilder(). forEntity (Movie.class) .get();

Query luceneQuery = qb.phrase(). OnField ("title"). Предложение (term.toLowerCase()). CreateQuery(); javax.persistence.Query query = fullTextEntityMgr.createFullTextQuery (luceneQuery, Movie.class);

 Смежные вопросы

  • Нет связанных вопросов^_^