ada*_*luk 3 lucene hibernate hibernate-search
Hibernate Search(lucene)是否有可能组合两个不同的查询.例如,当我想要搜索具有一个对应匹配值的2个字段时:
firstname - John
lastname - Doe
qBuilder.keyword().onField("firstname").matching("John").createQuery());
qBuilder.keyword().onField("lastname").matching("Doe").createQuery());
Run Code Online (Sandbox Code Playgroud)
是一种从这一个查询?
注意: 这是有效的,但对于更多Hibernate-esque方法,请参阅我的其他答案
createQuery()返回标准的Lucene Query.因此,在Lucene中合并两个查询的典型方法是使用BooleanQuery:
Query query1 = qBuilder.keyword().onField("firstname").matching("John").createQuery();
Query query2 = qBuilder.keyword().onField("lastname").matching("Doe").createQuery();
BooleanQuery bq = new BooleanQuery();
//Assuming you want to require a match on both first and last names.
//If a match on either is enough, use BooleanClause.Occur.SHOULD
bq.add(new BooleanClause(query1, BooleanClause.Occur.MUST));
bq.add(new BooleanClause(query2, BooleanClause.Occur.MUST));
Run Code Online (Sandbox Code Playgroud)
而不是BooleanQuery直接使用Lucene ,更多的Hibernate方法是使用Hibernate bool()查询(请参阅此处文档的 5.1.2.6节):
Query query = qBuilder.bool()
.must(qBuilder.keyword().onField("firstname").matching("John").createQuery())
.must(qBuilder.keyword().onField("lastname").matching("Doe").createQuery())
.createQuery();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1964 次 |
| 最近记录: |