java - Hibernate (lucene) 搜索中的 And 运算符

标签 java hibernate lucene hibernate-search

我正在使用以下代码使用 hibernate-search 进行搜索。但这会将搜索查询标记化并进行OR 搜索,而我想进行AND 搜索。我该怎么做?

    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
    String searchQuery = "test query";

    QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Customer.class).get();

    TermMatchingContext onFields = qb.keyword().onFields("customer.name","customer.shortDescription","customer.longDescription");

    org.apache.lucene.search.Query query = onFields.matching(searchQuery).createQuery();

    FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Customer.class);

    List<Customization> result = persistenceQuery.getResultList();

最佳答案

FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Customer.class).get();
TermMatchingContext onFields = qb.keyword().onFields("customer.shortDescription",  "customer.longDescription");

BooleanJunction<BooleanJunction> bool = qb.bool();
org.apache.lucene.search.Query query = null;
String[] searchTerms = searchQuery.split("\\s+");
for (int j = 0; j < searchTerms.length; j++) {
   String currentTerm = searchTerms[j];
   bool.must(onFields.matching(currentTerm).createQuery());
}

query = bool.createQuery();

FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Customer.class);
resultList = persistenceQuery.getResultList();

关于java - Hibernate (lucene) 搜索中的 And 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11863122/

相关文章:

java - public classG<A extends X & Y & Z> 关于 Java 中的泛型

java - 结合 CMT 和 BMT 的事务管理(BMT 情况下数据提前提交)

lucene - 使用 RAM 目录

hibernate - 如何查询M :N relationship using enums with CriteriaBuilder

Solr 文本字段和字符串字段 - 不同的搜索行为

java - 如何在 Hibernate-search 中索引继承字段?

java - 一般错误 : type . .. 不适用于参数

java - Atmosphere 框架Spring mvc集成

java - Java 中使用正则表达式的字符串方法不会像使用其他特殊字符那样使用点发出任何错误。为什么?

java - 在 Hibernate @Formula 中使用 DATE_ADD