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.

Búsqueda de documentos vinculados en CouchDB

Soy nuevo en couchdb y espero que alguien pueda ayudarme con una solución a este problema.

Supongamos que tengo un documento de dirección que contiene varias claves, pero de forma importante, una dirección en una sola línea y un array de personas:

{
  "_id": "002cb726bfe69a79ed9b897931000ec6",
  "_rev": "2-6af6d8896703e9db6f5ba97abb1ca5d7",
  "type": "address",
  ...
  "singleLineAddress": "28 CLEVEDON ROAD, WESTON-SUPER-MARE, BS23 1DG",
  ...
  "persons":["d506d09a1c46e32f6632e6d99a0062bd","002cb726bfe69a79ed9b897931001c80"]
}

Luego tengo un documento de persona con varias claves, especialmente con el nombre y el apellido:

{
    "_id": "d506d09a1c46e32f6632e6d99a0062bd",
    "_rev": "4-98fae966a92d5c6c359cb8ddfaa487e1",
    "type": "person",
    ...
    "firstName": "Joe",
    "lastName": "Bloggs"
    ...
}

Entiendo que puedo crear una vista de documentos vinculados y emitir todas las IDs de las personas vinculadas a la dirección, luego puedo usar include_docs=true para ver todos los datos de las personas. Pero, según lo que estoy leyendo, no se recomienda utilizar include_docs=true porque puede ser costoso.

En última instancia, me gustaría utilizar couchdb-lucene para realizar una búsqueda de texto completo en la persona @ dirección utilizando el nombre y la dirección. ¿Es esto posible utilizando documentos vinculados?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible utilizar couchdb-lucene para ejecutar una búsqueda de texto completo (FTS) contra la persona @ dirección utilizando el nombre y la dirección, incluso cuando se utilizan documentos vinculados.

    Una solución para evitar utilizar include_docs=true sería emitir los datos relevantes de la persona junto con el ID de la persona en la vista del documento vinculado. Por ejemplo, la vista podría modificarse para emitir lo siguiente para cada persona vinculada a una dirección:

    {
      "person_id": "d506d09a1c46e32f6632e6d99a0062bd",
      "firstName": "Joe",
      "lastName": "Bloggs"
    }
    

    Luego, en la consulta de FTS, se podría utilizar una cadena de consulta de lucene que incluya tanto los campos relevantes del documento de dirección (por ejemplo, singleLineAddress) como los datos de la persona vinculada (por ejemplo, firstName y lastName).

    Por ejemplo, si quieres encontrar todos los documentos de dirección vinculados a una persona llamada “Joe Bloggs”, podrías utilizar una consulta como la siguiente:

    ?q=firstName:Joe AND lastName:Bloggs AND persons:d506d09a1c46e32f6632e6d99a0062bd
    

    Esto buscaría los campos firstName y lastName de los registros de persona vinculados, así como el array persons en los registros de dirección, para encontrar todos los registros donde haya una coincidencia.

    Ten en cuenta que este enfoque puede no ser tan eficiente como utilizar una vista nativa en CouchDB, pero puede ser una solución viable si necesitas realizar consultas de FTS que abarquen varios tipos de documento vinculados.

Comments are closed.