es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Buscando una frase en MongoDB: comportamiento extraño

Tengo la siguiente colección:

books> db.books.find()
[
  {
    _id: ObjectId("61ab85b0056b5357b5e23e6b"),
    fields: 'hello buenos días'
  },
  { _id: ObjectId("61ab85b5056b5357b5e23e6c"), fields: 'buenos días' },
  {
    _id: ObjectId("61ab8679056b5357b5e23e6d"),
    fields: 'hola buenos días chicos'
  },
  {
    _id: ObjectId("61ab8684056b5357b5e23e6e"),
    fields: 'buenos días chicos'
  }
]

Luego, ejecuto esta consulta:

db.books.find({$text : {$search : "buenos días hello"}})

y obtengo:

[
  { _id: ObjectId("61ab85b5056b5357b5e23e6c"), fields: 'buenos días' },
  {
    _id: ObjectId("61ab8684056b5357b5e23e6e"),
    fields: 'buenos días chicos'
  },
  {
    _id: ObjectId("61ab85b0056b5357b5e23e6b"),
    fields: 'hello buenos días'
  },
  {
    _id: ObjectId("61ab8679056b5357b5e23e6d"),
    fields: 'hola buenos días chicos'
  }
]

¿Puede ayudarme a entender el resultado? El primer resultado no tiene mucho sentido para mí (documento _id: …23e6c), ya que no contiene la cadena “hello”.

Leí la primera respuesta a esta pregunta. ¿Significa esto que, en mi caso, MongoDB está buscando:

(buenos días) Y (buenos O días O hello)

Esto podría explicar mi pregunta, pero no puedo encontrar una referencia exacta a esto en la documentación de MongoDB.

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El resultado de la consulta se basa en la puntuación de búsqueda de texto calculada para cada documento según la consulta de búsqueda proporcionada. En este caso, la consulta de búsqueda es “buenos días hola”, lo que significa que MongoDB está buscando documentos que contengan al menos una instancia de “buenos” Y “días” Y “hola” en cualquier orden.

    El orden de las palabras no importa en una búsqueda de texto; en su lugar, el algoritmo de búsqueda busca palabras que coincidan con cualquiera de los términos proporcionados y luego devuelve los documentos que contienen la mayor cantidad de términos coincidentes primero. Es por eso que el primer documento devuelto en el resultado solo tiene “buenos días” y no “hola”. Aún es una coincidencia porque contiene la frase exacta “buenos días”.

    Para comprender mejor cómo funciona la búsqueda de texto y cómo ajustar su consulta, puede consultar la documentación de MongoDB sobre búsqueda de texto, incluida la sección sobre búsquedas de frases (https://docs.mongodb.com/manual/reference/operator/query/text/#phrases).

Comments are closed.