gpt4 book ai didi

java - Dropwizard hibernate 搜索

转载 作者:行者123 更新时间:2023-11-29 04:21:41 25 4
gpt4 key购买 nike

我正忙于 Dropwizard 应用程序,想在我的数据库中搜索某些实体。我已经看到这可以通过在 Entity 类的顶部创建 NamedQuery 语句来完成,如 this tutorial .然后从 DAO 类执行查询。

从那以后我偶然发现了 Hibernate search在搜索数据库中的实体时,它似乎是一个更好的解决方案。因此我的问题是 Dropwizard 框架是否支持它?此外,如果支持,将如何配置和使用它?我没能在 Dropwizard's hibernate documentation 中找到对它的任何引用.

最佳答案

通过反复试验,我设法弄清楚了如何在我的 Dropwizard 应用程序中使用 hibernate 搜索。事实证明 Dropwizard 不直接支持它,但可以通过少量努力添加。我做了以下事情:

1.在我的 pom 文件中添加了 Hibernate Search 依赖项:

    <!-- Search -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-orm</artifactId>
<version>5.9.0.Final</version>
</dependency>

2.在我的应用程序的 run 方法中,我创建了索引器:

           // search functionality
try {
EntityManager em = hibernate.getSessionFactory().createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);

fullTextEntityManager.createIndexer().startAndWait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

3.使用@Indexed@Field 注释使我的实体类可搜索

@Entity
@Indexed
@Table(name = "product")
public class Product {

@Id
private int id;

@Field(termVector = TermVector.YES)
private String productName;

@Field(termVector = TermVector.YES)
private String description;

@Field
private int memory;

// getters, setters, and constructors
}

4.然后在我的 DAO 类中,我可以按如下方式搜索实体:

public List<Product> search(String term) {
EntityManager em = this.currentSession();

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);

// create native Lucene query unsing the query DSL
// alternatively you can write the Lucene query using the Lucene query parser
// or the Lucene programmatic API. The Hibernate Search DSL is recommended though
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(Product.class)
.get();

org.apache.lucene.search.Query luceneQuery = qb
.keyword()
.onFields("description", "productName")
.matching(term)
.createQuery();

// wrap Lucene query in a javax.persistence.Query
javax.persistence.Query jpaQuery =
fullTextEntityManager.createFullTextQuery(luceneQuery, Product.class);

// execute search
List<Product> result = jpaQuery.getResultList();

return result;
}

我找到了 this tutorial在我的实现过程中非常有帮助。

关于java - Dropwizard hibernate 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48767829/

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