gpt4 book ai didi

java - 如何在 Hibernate Search 中使用 boolean 运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:40 24 4
gpt4 key购买 nike

我正在学习 Hibernate Search Query DSL ,而且我不确定如何使用 boolean 参数(例如 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 查询,但这是将 boolean 逻辑与 hibernate 搜索结合使用的正确方法吗? “should()”是否等同于“OR”(类似地,“must()”是否对应于“AND”)?

此外,以这种方式编写查询感觉很麻烦。例如,如果我有一个要匹配的 firstNames 集合怎么办?这种类型的查询从一开始就很适合 DSL 吗?

最佳答案

是的,你的例子是正确的。 boolean 运算符被称为 should 而不是 OR 因为它们在 Lucene API 和文档中的名称,并且因为它更合适:它不仅影响 boolean 值决定,但它也会影响结果的评分。

例如,如果您搜索“of brand Fiat”或“blue”的汽车,也会返回标有 Fiat 和 blue 的汽车,并且比那些标有 blue 但不是 Fiat 的汽车得分更高。

它可能会让人感觉很麻烦,因为它是程序化的并且提供了许多详细的选项。一个更简单的替代方法是为您的查询使用一个简单的字符串,并使用 QueryParser 创建查询。通常解析器用于解析用户输入,程序化的更容易处理定义明确的字段;例如,如果您有您提到的集合,则很容易在 for 循环中构建它。

关于java - 如何在 Hibernate Search 中使用 boolean 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220184/

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