java - 使用特定分析器在 Hibernate 中执行搜索

标签 java hibernate jpa lucene hibernate-search

来自http://hibernate.org/search/documentation/getting-started/#indexing

EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager =
    org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
em.getTransaction().begin();

// 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(Book.class).get();
org.apache.lucene.search.Query luceneQuery = qb
  .keyword()
  .onFields("title", "subtitle", "authors.name")
  .matching("Java rocks!")
  .createQuery();

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

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

如何使用与搜索上方的字段或实体所使用的分析器不同的特定分析器?

最佳答案

您可以通过以下方式覆盖用于特定字段或多个字段的分析器

 QueryBuilder qb = fullTextEntityManager.getSearchFactory()
        .buildQueryBuilder().forEntity(Book.class)
        .overridesForField("title","analyzerName")
        .get();

注意:要覆盖多个字段,您可以再次使用相同的调用,因为 overridesForField 方法返回一个entityContext 本身。

类似这样的事情

QueryBuilder qb = fullTextEntityManager.getSearchFactory()
            .buildQueryBuilder().forEntity(Book.class)
            .overridesForField("title","analyzerName")
            .overridesForField("subtitle","analyzerName2")
            .get();

这里是[文档]( https://docs.jboss.org/hibernate/search/4.0/api/org/hibernate/search/query/dsl/EntityContext.html#overridesForField(java.lang.String , java.lang.String))。

关于java - 使用特定分析器在 Hibernate 中执行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40892682/

相关文章:

java - 使用java更改Excel单元格颜色

java - 如何同时将子字符串转换为整数并存储它们以供将来使用?

java - 无法在 HIbernate 4 中保留 OneToMany 关系

mysql - 在 HQL 查询的 where 子句中进行查询,但不想选择该字段

java - 如何获得按钮以在 fragment 中运行函数?

java - Android Java 中的 BBCODE 到 HTML

java - Hibernate - 集合未填充所有子项

java - hibernate : ORA-00907: missing right parenthesis

java - 如何处理 JPQL 查询返回的对象类型?

java - 调用父持久方法时,JPA 子进程不会持久