¿Cómo puedo realizar una búsqueda con el operador 'Y' a través de RavenDB?
Según los documentos, está escrito que necesito agregar la enumeración del operador ("Y" \ "O") como el tercer parámetro de la función de búsqueda. https://ravendb.net/docs/article-page/4.0/nodejs/client-api/session/querying/how-to-use-search
Por alguna razón, el operador AND no funciona y me da resultados OR por defecto.
Ejemplo:
Colección de usuarios:
users/1-A: { firstName: 'Joe', lastName: 'Allen' } users/2-A: { firstName: 'Joe', lastName: 'Biden' }La llamada al cuervo:
session.query({ collection: 'Users' }) .search('firstName', 'Joe', 'AND') // search with AND operator .search('lastName', 'Biden') .all()La llamada anterior devuelve ambos documentos. ¿Cuál debería ser la sintaxis apropiada para eso?
Gracias
Puede encontrar ejemplos detallados y explicaciones paso a paso en las siguientes demostraciones de RavenDB :
https://demo.ravendb.net/demos/csharp/text-search/fts-query-search-basics https://demo.ravendb.net/demos/csharp/text-search/fts-query-search-operators
Entonces, esto aquí arriba es actualmente solo para el cliente C # (las demostraciones de nodeJS están por determinar)
Al usar 2 métodos de búsqueda separados :
Entonces la otra respuesta aquí, sobre el uso de andAlso , es correcta
Cuando se utiliza un método de búsqueda único :
Usar AND/OR es relevante solo cuando tiene 2 o más términos dentro del mismo método de búsqueda .
es decir:
.search('firstName', 'John Doe', 'AND')
testamento Y ambos términos (John && Doe)
.search('firstName', 'John Doe', 'OR')
será O los resultados (John || Doe)
Así que encontré una solución para node.js. La enumeración "AND" como tercer parámetro no me funcionó (según esta página: https://ravendb.net/docs/article-page/4.0/nodejs/client-api/session/querying/how-to- uso-búsqueda ).
Encontré otra página: https://ravendb.net/docs/article-page/4.0/nodejs/indexes/querying/searching
Que usa la función andAlso() en la consulta para usar el operador "AND" y funciona.
Ejemplo:
const joeBiden = session.query({ collection: 'Users' }) .search('firstName', 'Joe') .andAlso() .search('lastName', 'Biden') .all()Esto devolverá solo el documento de Joe Biden.
Tenga en cuenta que devuelve una promesa.
** Raven generará un error si llama a la función andAlso y no realiza ninguna consulta después, por lo que si recorre los posibles términos de búsqueda, recuerde excluir la función andAlso en la última búsqueda.
const joeBiden = session.query({ collection: 'Users' }) .search('firstName', 'Joe') .andAlso() .search('lastName', 'Biden') .andAlso() // this line will cause Raven to throw an error .all()