我正在学习Hibernate Search Query DSL,但我不确定如何使用 AND 或 OR 等布尔参数构造查询。
例如,假设我要返回firstName
值为“bill”或“bob”的所有人员记录。
在 hibernate 文档之后,一个示例使用带有两个子查询的 bool() 方法,例如:
QueryBuilder b = fts.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();
Query luceneQuery = b.bool()
.should(b.keyword().onField("firstName").matching("bill").createQuery())
.should(b.keyword().onField("firstName").matching("bob").createQuery())
.createQuery();
logger.debug("query 1:{}", luceneQuery.toString());
这最终会产生我想要的 lucene 查询,但这是在休眠搜索中使用布尔逻辑的正确方法吗?“should()”是否等同于“OR”(类似地,“must()”是否对应于“AND”)?
此外,以这种方式编写查询感觉很麻烦。例如,如果我有一组要匹配的名字怎么办?这种类型的查询首先是否适合 DSL?