? Estoy aprendiendo el Hibernate Search Query DSL, y no estoy seguro de cómo construir consultas usando argumentos booleanos como AND u OR.¿Cómo uso operadores booleanos con Hibernate Search
Por ejemplo, supongamos que quiero devolver todos los registros de personas que tienen un valor firstName
de "factura" o "bob".
Siguiendo los docs de hibernación, un ejemplo utiliza el método bool() w/dos subconsultas, tales como:
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());
Esta última instancia produce la consulta lucene que quiero, pero esto es la forma correcta de utilizar lógica booleana con búsqueda de hibernación? ¿Es "should()" el equivalente de "OR" (de manera similar, "must()" corresponde a "AND") ?.
Además, escribir una consulta de esta manera parece engorroso. Por ejemplo, ¿qué pasa si tengo una colección de firstNames con los que puedo comparar? ¿Es este tipo de consulta una buena coincidencia para el DSL en primer lugar?
'' y 'must' es, pero' should' parece como una especie de versión más suave del ' y' Definitivamente no 'o'. En teoría, puede obtener 'o' como' no y no', obteniendo 'debe (b.must(). Not(). Debe(). Not()). Not()' pero esa no es una respuesta muy satisfactoria. – trutheality