繁体   English   中英

QueryDSL和使用Lucene分析仪的休眠搜索

[英]QueryDSL & Hibernate-Search with Lucene Analyzers

我将Hibernate-Search配置为在索引实体时使用我的自定义分析器。 但是,当我尝试使用QueryDSL的Hibernate-Search集成进行搜索时,它没有找到实体,但是如果我使用直接的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运行查询之前,是否有任何方法可以让它们自动运行?

关于您的问题,使用查询DSL时默认情况下将应用分析器。 在大多数情况下,使用相同的分析器进行索引和搜索是有意义的。 因此,除非使用“ ignoreAnalyzer”,否则默认情况下将应用分析器。

为什么您的第二个示例不起作用,我无法告诉您。 SearchQuery不是Hibernate Search或ORM API的一部分。 它必须是您的应用程序的内部类。 这堂课怎么了? 它使用哪种查询?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM