gpt4 book ai didi

java - 使用 Lucene 分析器进行 QueryDSL 和 Hibernate 搜索

转载 作者:行者123 更新时间:2023-11-29 09:09:55 26 4
gpt4 key购买 nike

我将 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 {}

我索引了一个标题为“the quick brown fox jumped over the lazy dog”的实体。

这些工作......

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 的一部分。它必须是您应用程序的内部类。这个类发生了什么?它使用哪种类型的查询?

关于java - 使用 Lucene 分析器进行 QueryDSL 和 Hibernate 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com