Может быть, что-то вроде этого?
Search.session(entityManager).search(Book.class)
.predicate(f -> f.bool(b -> {
b.must(f.match().field("inStock").matching(true));
if (query != null && !query.trim().isEmpty()) {
b.must(f.simpleQueryString().field("title")
.matching(query));
}
}))
.fetchHits(10);
Или, если "inStock" передан в качестве параметра и может быть null
(для обозначения "нет ограничений по состоянию на складе"):
Search.session(entityManager).search(Book.class)
.predicate(f -> f.bool(b -> {
b.must(f.matchAll()); // Match everything by default, if there are no constraints
if (inStock != null) {
b.must(f.match().field("inStock").matching(true));
}
if (query != null && !query.trim().isEmpty()) {
b.must(f.simpleQueryString().field("title")
.matching(query));
}
}))
.fetchHits(10);
См. этот раздел документации , особенно последний пример ("Простое динамическое добавление предложений с использованием лямбда-синтаксиса")