Я настроил Hibernate-Search для использования моего пользовательского анализатора при индексировании моих сущностей. Однако, когда я пытаюсь выполнить поиск с помощью интеграции QueryDSL Hibernate-Search, он не находит объекты, но если я использую прямой поиск в спящем режиме, он что-то находит.
@AnalyzerDef(name = "customanalyzer",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = {
@Parameter(name = "language", value = "English")
})
})
@Analyzer(definition = "customanalyzer")
public abstract class Post extends BaseEntity {}
Я проиндексировал объект с заголовком «Быстрая коричневая лиса перепрыгнула через ленивую собаку».
Эти работы…
List articlePosts = fullTextEntityManager.createFullTextQuery(queryBuilder.keyword().onFields("title").matching("jumped").createQuery(), ArticlePost.class).getResultList(); // list of 2
List articlePosts = fullTextSession.createFullTextQuery(queryBuilder.keyword().onFields("title").matching("jumped").createQuery(), ArticlePost.class).getResultList(); // list of 2
Это не…
SearchQuery<ArticlePost> query = new SearchQuery<ArticlePost>(this.entityManagerFactory.createEntityManager().unwrap(HibernateEntityManager.class).getSession(), post);
List articlePosts = query.where(post.title.contains("jumped")).list() // empty list
Но поиск того, как это, вероятно, хранится в Lucene (вероятный результат SnowballPorter), тогда он работает ...
SearchQuery<ArticlePost> query = new SearchQuery<ArticlePost>(this.entityManagerFactory.createEntityManager().unwrap(HibernateEntityManager.class).getSession(), post);
List articlePosts = query.where(post.title.contains("jump")).list() // list of 2
Таким образом, кажется, что при использовании QueryDSL анализатор не запускается до того, как он выполнит запрос. Может ли кто-нибудь подтвердить, что это проблема, и есть ли способ, чтобы они автоматически запускались до того, как QueryDSL выполнит запрос?