Introducción
La indexación de búsqueda de texto completo (FTS) puede ser un reto para aquellos que no están familiarizados con la búsqueda en general. En este post, tomaremos algunos casos de uso de búsqueda comunes y trabajaremos en la creación de índices apropiados siguiendo las mejores prácticas para la indexación FTS de Couchbase.
Casos prácticos
Se estudiarán los siguientes casos de uso habituales en las búsquedas:
- Búsqueda simple
- Búsqueda independiente del campo
- Encontrar al vecino más próximo
- Buscar documentos con un modelo que cambia constantemente
Modelo de datos de muestras de viajes
A lo largo de este documento, haremos referencia al Viajes Conjunto de datos de muestra disponible para instalar en cualquier instancia de Couchbase Server. El bucket travel-sample tiene varios tipos de documentos distintos: aerolínea, ruta, aeropuerto, punto de referencia y hotel. El modelo de documento para cada tipo de documento contiene:
- Una clave que actúa como clave primaria
- Un campo id que identifica el documento
- Un campo de tipo que identifica el tipo de documento
La siguiente figura ilustra la relación entre los distintos tipos de documentos del bucket de muestras de viajes. Muestra los campos de clave primaria, ID y tipo que tiene cada documento, además de algunos campos representativos de cada tipo de documento. (Los documentos emblemáticos no aparecen en la foto).

Figura 0. Documentos del modelo de datos de muestras de viajes
Ejemplos de uso
Búsqueda simple
Resumen del caso de uso: un usuario encontrará hoteles buscando una palabra clave en el campo de descripción del hotel y verá una lista de hoteles coincidentes.
Pasos para la creación de índices:
- En la interfaz de búsqueda de texto completo, haga clic en "Añadir índice".
- Especifique un nombre de índice, por ejemplo "hotel_desc", y seleccione el bucket de muestras de viajes.
- Dado que cada documento del bucket de muestras de viajes tiene un campo "type" que indica el tipo de documento, deje "JSON type field" establecido en "type".
- En asignaciones de tipos:
- Pulse "+ Añadir asignación de tipos", y especifique "hotel" como nombre de tipo, ya que el requisito es buscar en todos los documentos de hoteles.
- Se puede acceder a una lista de los analizadores disponibles mediante el menú desplegable situado a la derecha del campo del nombre del tipo. Para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto del índice.
- Dado que el requisito es buscar sólo en el campo de descripción del hotel, marque "indexar sólo los campos especificados". Si esta opción está activada, sólo se incluirán en el índice los campos del documento que especifique el usuario para el índice mapeo del tipo de hotel (el mapeo no será dinámicolo que significa que todos los campos se consideran disponibles para la indexación).
- Haga clic en Aceptar.
- Sitúe el ratón sobre la fila con la asignación del tipo de hotel y haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo de descripción se incluya individualmente en el índice. Especifica lo siguiente:
- campo: Introduce el nombre del campo a indexar, "descripción".
- Tipo: Deje esto establecido en texto para el campo de descripción.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Desmarcando la casilla se eliminaría explícitamente el campo del índice.
- casilla de verificación de la tienda: Esta configuración incluye el contenido del campo en los valores devueltos por la búsqueda y permite resaltar las expresiones coincidentes en los resultados, pero también aumenta el tamaño del índice y el tiempo de construcción. Deje esta opción sin marcar, ya que no es necesario resaltar los resultados para este caso de uso.
- casilla "incluir en _todos los campos": Desmarque ya que el caso de uso es buscar específicamente en el campo de descripción.
- "incluir vectores de términos": Ciertos tipos de funciones (como el resaltado y la búsqueda por frases) requieren vectores de términos, pero esto aumenta el tamaño del índice y el tiempo de construcción. Desmarque esta casilla ya que el caso de uso es una búsqueda por palabras clave sin resaltado.
- Haga clic en OK.
- Por fin, desmarque la casilla situada junto a la correspondencia de tipos "por defecto". Si se deja activada la asignación por defecto, todos los documentos del bucket se incluyen en el índice, independientemente de si el usuario especifica activamente las asignaciones de tipos. Sólo se requieren los documentos del hotel, que se incluyen mediante la asignación de tipo de hotel añadida previamente.
- Los valores por defecto son suficientes para el resto de paneles contraídos (Analizadores, Filtros personalizados, Analizadores de fecha/hora y Avanzado).
- Las réplicas de índice pueden establecerse en 1, 2 ó 3, siempre que el clúster esté ejecutando el servicio de búsqueda en n+1 nodos. Con un clúster de desarrollo de un solo nodo, mantenga el valor predeterminado de 0.
- Para Tipo de índice, el valor por defecto de "Versión 6.0 (Scorch)" es apropiado para cualquier índice recién creado. Scorch reduce el tamaño del índice en disco y mejora el rendimiento de la indexación y la gestión de mutaciones.
- En este punto, la página de creación de índice debería parecerse al último fotograma capturado en la Figura 1. Haga clic en "Crear índice" para completar el proceso.

Figura 1 - Creación del índice "hotel_desc"
Nota: Consulte "Índice: hotel_desc" en el Apéndice A para ver la carga útil JSON utilizada para crear este índice con la API REST.
Pruebas de consultas sobre el índice:
- En la interfaz de búsqueda de texto completo, espere a que el progreso de indexación muestre 100% y, a continuación, haga clic en el nombre del índice "hotel_desc".
- Para buscar cualquier hotel con la palabra clave "granja" en la descripción, en el cuadro de texto "buscar en este índice...", introduzca "descripción:granja" y haga clic en Buscar. Esta delimitación de la búsqueda es necesaria porque el índice La casilla "incluir en _todos los campos" no estaba marcada.
- Los resultados se muestran (de forma similar a la Figura 2) con la clave de cada documento coincidente.

Figura 2 - Índice "hotel_desc" búsqueda de "description:farm"
4. La misma búsqueda se puede ejecutar a través de la API REST utilizando curl:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
rizo -u nombre de usuario:contraseña -XPOST -H "Content-Type: application/json" \ http://localhost:8094/api/index/hotel_desc/query \ -d '{ "explicar": true, "fields": [ "*" ], "highlight": {}, "consulta": { "consulta": "descripción:granja" } }' |
Búsqueda independiente del campo
Resumen del caso de uso: un usuario encontrará hoteles buscando una palabra clave en los campos de nombre de hotel, alias, descripción, dirección y reseñas, y verá una lista de hoteles coincidentes. que incluye las coincidencias resaltadas.
Pasos para la creación de índices:
- En la interfaz de búsqueda de texto completo, haga clic en "Añadir índice".
- Especifique un nombre de índice, por ejemplo "hotel_mult_fields", y seleccione el bucket de muestras de viajes.
- Dado que cada documento del bucket de muestras de viajes tiene un campo "type" que indica el tipo de documento, deje "JSON type field" establecido en "type".
- En asignaciones de tipos:
- Pulse "+ Añadir asignación de tipos", y especifique "hotel" como nombre de tipo, ya que el requisito es buscar en todos los documentos de hoteles.
- Se puede acceder a una lista de analizadores disponibles mediante el menú desplegable situado a la derecha del campo de nombre de tipo. Para este caso de uso, deje seleccionado "heredar" para que la asignación de tipos herede el analizador por defecto del índice.
- Dado que el requisito es buscar en los campos de nombre de hotel, alias, descripción, dirección y reseñas, marque "indexar sólo los campos especificados". Con esta opción marcada, sólo los campos especificados por el usuario del documento se incluirán en el índice para la asignación de tipo de hotel (la asignación no será dinámica, lo que significa que todos los campos se considerarán disponibles para la indexación).
- Haga clic en OK.
- Añada cada uno de los 5 campos a la asignación de tipo de hotel:
- Nombre: Pase el ratón sobre la fila con la asignación del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduce el nombre del campo a indexar, "nombre".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte esta configuración para incluir el contenido del campo en los resultados de la búsqueda, lo que permite resaltar las expresiones coincidentes en los resultados.
- casilla "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en varios campos.
- casilla "incluir vectores de términos": Déjela marcada ya que el caso de uso requiere resaltar los resultados.
- Haga clic en OK.
- Alias: Pase el ratón sobre la fila con la asignación del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduce el nombre del campo a indexar, "alias".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte esta configuración para incluir el contenido del campo en los resultados de la búsqueda, lo que permite resaltar las expresiones coincidentes en los resultados..
- casilla "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en varios campos.
- casilla "incluir vectores de términos": Déjela marcada ya que el caso de uso requiere resaltar los resultados.
- Haga clic en OK.
- Descripción: Pase el ratón por encima de la fila con la asignación del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduce el nombre del campo a indexar, "descripción".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte esta configuración para incluir el contenido del campo en los resultados de la búsqueda, lo que permite resaltar las expresiones coincidentes en los resultados.
- casilla "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en varios campos.
- casilla "incluir vectores de términos": Déjela marcada ya que el caso de uso requiere resaltar los resultados.
- Haga clic en OK.
- Dirección: Sitúe el ratón sobre la fila con la asignación del tipo de hotel y haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduzca el nombre del campo a indexar, "dirección".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte esta opción para incluir el contenido del campo en los resultados de la búsqueda, lo que permite resaltar las expresiones coincidentes en los resultados.
- casilla "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en varios campos.
- casilla "incluir vectores de términos": Déjela marcada ya que el caso de uso requiere resaltar los resultados.
- Haga clic en OK.
- Reseñas: Sitúe el ratón sobre la fila con la asignación del tipo de hotel y haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduzca el nombre del campo a indexar, "reseñas".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte esta configuración para incluir el contenido del campo en los resultados de la búsqueda, lo que permite resaltar las expresiones coincidentes en los resultados.
- casilla "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en varios campos.
- casilla "incluir vectores de términos": Déjela marcada ya que el caso de uso requiere resaltar los resultados.
- Haga clic en OK.
- Nombre: Pase el ratón sobre la fila con la asignación del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- Por fin, desmarque la casilla situada junto a la correspondencia de tipos "por defecto". Si se deja activada la asignación por defecto, todos los documentos del bucket se incluyen en el índice, independientemente de si el usuario especifica activamente las asignaciones de tipos. Sólo se requieren los documentos del hotel, que se incluyen mediante la asignación de tipo de hotel añadida previamente.
- Los valores por defecto son suficientes para el resto de paneles contraídos (Analizadores, Filtros personalizados, Analizadores de fecha/hora y Avanzado).
- Las réplicas de índice pueden establecerse en 1, 2 ó 3, siempre que el clúster esté ejecutando el servicio de búsqueda en n+1 nodos. Con un clúster de desarrollo de un solo nodo, mantenga el valor predeterminado de 0.
- Para el tipo de índice, el valor por defecto de "Versión 6.0 (Scorch)" es apropiado para cualquier índice recién creado. Scorch reduce el tamaño del índice en disco y mejora el rendimiento de la indexación y la gestión de mutaciones.
- En este punto, la página de creación de índice debería parecerse al último fotograma capturado en la Figura 3. Haga clic en "Crear índice" para completar el proceso.

Figura 3 - Creación del índice "hotel_mult_fields"
Nota: Consulte "Índice: hotel_mult_fields" en el Apéndice A para ver la carga útil JSON utilizada para crear este índice a través de la API REST.
Pruebas de consultas sobre el índice:
- En la interfaz de búsqueda de texto completo, espere a que el progreso de indexación muestre 100% y, a continuación, haga clic en el nombre del índice "hotel_mult_fields".
- Para buscar cualquier hotel con la palabra clave "granja" en los campos de nombre, alias, descripción, dirección o reseñas, en el cuadro de texto "buscar en este índice...", introduzca "granja" y haga clic en Buscar. No es necesario delimitar el campo de búsqueda, ya que el índice Se ha marcado la casilla de verificación "incluir en _todos los campos" para cada campo indexado en la asignación de tipo de hotel.
- Los resultados se muestran (de forma similar a la Figura 4) con la clave de cada documento coincidente y las coincidencias resaltadas en cada documento coincidente.

Figura 4 - Resultados de la búsqueda de "granja" en el índice "hotel_mult_fields
4. La misma búsqueda se puede ejecutar a través de la API REST utilizando curl:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
rizo -u nombre de usuario:contraseña -XPOST -H "Content-Type: application/json" \ http://localhost:8094/api/index/hotel_mult_fields/query \ -d '{ "explicar": true, "fields": [ "*" ], "highlight": {}, "consulta": { "consulta": "granja" } }' |
Encontrar al vecino más próximo
Resumen del caso de uso: un usuario buscará hoteles que se encuentren a una distancia determinada de una ubicación especificada y verá una lista de nombres de hoteles coincidentes ordenados por distancia desde la ubicación especificada.
Pasos para la creación de índices:
- En la interfaz de búsqueda de texto completo, haga clic en "Añadir índice".
- Especifique un nombre de índice, por ejemplo "hotel_geo", y seleccione el bucket de muestras de viajes.
- Dado que cada documento del bucket de muestras de viajes tiene un campo "type" que indica el tipo de documento, deje "JSON type field" establecido en "type".
- En asignaciones de tipos:
- Pulse "+ Añadir asignación de tipos", y especifique "hotel" como nombre de tipo, ya que el requisito es buscar en todos los documentos de hoteles.
- Se puede acceder a una lista de analizadores disponibles mediante el menú desplegable situado a la derecha del campo de nombre de tipo. Para este caso de uso, deje seleccionado "heredar" para que la asignación de tipos herede el analizador por defecto del índice.
- Dado que el requisito es buscar únicamente la ubicación del hotel, marque "indexar sólo los campos especificados". Con esta opción marcada, sólo los campos especificados por el usuario del documento se incluirán en el índice para la asignación de tipo de hotel (la asignación no será dinámica, lo que significa que todos los campos se considerarán disponibles para la indexación).
- Haga clic en OK.
- Añade los campos geo y nombre a la cartografía del tipo de hotel:
- Geo: Pase el ratón por encima de la fila con la cartografía del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo geográfico del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduce el nombre del campo a indexar, "geo".
- tipo: Ajústelo a geopunto.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte para incluir el contenido del campo en los resultados de la búsqueda.
- "incluir en _todos los campos": Déjela marcada ya que el requisito del caso de uso es buscar en el campo geo.
- Haga clic en Aceptar.
- Nombre: Pase el ratón sobre la fila con la asignación del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo del nombre del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- campo: Introduce el nombre del campo a indexar, "nombre".
- Tipo: Deje esto establecido en texto para el campo de nombre.
- buscable como: Déjelo igual que el nombre del campo para el caso de uso actual. Puede utilizarse para indicar un nombre de campo alternativo.
- analizador: Como se hizo para el mapeo de tipos, para este caso de uso, dejar seleccionado "heredar" para que que la asignación de tipos hereda el analizador por defecto.
- índice: Déjela marcada para que el campo se incluya en el índice. Si desmarca la casilla, el campo se eliminará explícitamente del índice.
- casilla de verificación de la tienda: Consulte para incluir el contenido del campo en los resultados de la búsqueda.
- casilla "incluir en _todos los campos": Desmarque este ya que el requisito del caso de uso es buscar sólo por ubicación pero mostrar el nombre en los resultados de la búsqueda.
- "incluir vectores de términos": Ciertos tipos de funciones (como el resaltado y la búsqueda por frases) requieren vectores de términos, pero esto aumenta el tamaño del índice y el tiempo de construcción. Desmarque esta casilla ya que el caso de uso es buscar sólo por geolocalización.
- Haga clic en Aceptar.
- Geo: Pase el ratón por encima de la fila con la cartografía del tipo de hotel, haga clic en el botón + y, a continuación, haga clic en "insertar campo hijo". Esto permitirá que el campo geográfico del hotel se incluya individualmente en el índice. Especifique lo siguiente:
- Por fin, desmarque la casilla situada junto a la correspondencia de tipos "por defecto". Si se deja activado el mapeo por defecto, todos los documentos del bucket se incluyen en el índice, independientemente de si el usuario especifica activamente mapeos de tipo. Sólo se requieren los documentos de hotel, que se incluyen mediante la asignación de tipos de hotel añadida anteriormente.
- Los valores por defecto son suficientes para el resto de paneles contraídos (Analizadores, Filtros personalizados, Analizadores de fecha/hora y Avanzado).
- Las réplicas de índice pueden establecerse en 1, 2 ó 3, siempre que el clúster esté ejecutando el servicio de búsqueda en n+1 nodos. Con un clúster de desarrollo de un solo nodo, mantenga el valor predeterminado de 0.
- Para el tipo de índice, el valor por defecto de "Versión 6.0 (Scorch)" es apropiado para cualquier índice recién creado. Scorch reduce el tamaño del índice en disco y mejora el rendimiento de la indexación y la gestión de mutaciones.
- En este punto, la página de creación de índice debería parecerse a la Figura 5. Haga clic en "Crear índice" para completar el proceso.

Figura 5 - Creación del índice "hotel_geo
Nota: Consulte "Índice: hotel_geo" en el Apéndice A para ver la carga útil JSON utilizada para crear este índice a través de la API REST.
Pruebas de consultas sobre el índice:
- En la interfaz de usuario de búsqueda de texto completo, espere a que el progreso de indexación muestre 100%.
- Sólo las consultas "query string" pueden ser probadas a través de la Search UI en la consola web de Couchbase, por lo que esta búsqueda geoespacial se probará a través de la API REST utilizando curl. Buscar los 2 hoteles más cercanos a menos de una milla de una ubicación en San Francisco, devolviendo el nombre del hotel y las coordenadas ordenadas por distancia utilizando el siguiente cuerpo de consulta JSON:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
rizo -u nombre de usuario:contraseña -XPOST -H "Content-Type: application/json" \ http://localhost:8094/api/index/hotel_geo/query \ -d '{ "desde": 0, "tamaño": 2, "fields": [ "nombre", "geo" ], "consulta": { "localización": { "lon": -122.4194, "lat": 37.7749 }, "distancia": "1mi", "campo": "geo" }, "sort": [ { "por": "geo_distancia", "campo": "geo", "unidad": "mi", "localización": { "lon": -122.4194, "lat": 37.7749 } } ] }' |
3. Resultado de la consulta JSON:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
{ "status": { "total": 6, "fallido": 0, "con éxito": 6 }, "solicitud": { "consulta": { "localización": [ -122.4194, 37.7749 ], "distancia": "1mi", "campo": "geo" }, "tamaño": 2, "de": 0, "destacar": null, "campos": [ "nombre", "geo" ], "facetas": null, "explicar": falso, "clasificar": [ { "por": "geo_distancia", "campo": "geo", "localización": { "lat": 37.7749, "lon": -122.4194 }, "unidad": "mi" } ], "incluirLocalizaciones": falso }, "éxitos": [ { "índice": "hotel_geo_72ca6700aea9283d_aa574717", "id": "hotel_25593", "puntuación": 0.09668939164302555, "clasificar": [ " \u0001?XA7]\u0003\u0010\u0002" ], "campos": { "geo": [ -122.42000007592608, 37.7739999880488 ], "nombre": "Hotel del Centro Cívico" } }, { "índice": "hotel_geo_72ca6700aea9283d_aa574717", "id": "hotel_26263", "puntuación": 0.09668939164302555, "clasificar": [ " \u0001?h.>\u001dOJ\"7" ], "campos": { "geo": [ -122.42320003510062, 37.77719998913285 ], "nombre": "Hayes Valley Inn" } } ], "total_hits": 37, "max_score": 0.1169539736791776, "tomó": 720591, "facetas": null } |
Búsqueda dinámica
Resumen del caso de uso: un usuario encontrará hoteles buscando una palabra clave que aparezca en cualquier atributo del documento del hotel y verá una lista de hoteles coincidentes.
En este caso, queremos buscar datos que cambian todo el tiempo: se van a añadir o eliminar campos, o los campos pueden cambiar de una simple cadena a un objeto, y nuestra búsqueda debe encontrar los puntos de referencia coincidentes en todo momento. Para cumplir este requisito, crearemos un índice dinámico.
Pasos para la creación de índices:
- En la interfaz de búsqueda de texto completo, haga clic en "Añadir índice".
- Especifique un nombre de índice, por ejemplo "hotel_dynamic", y seleccione el bucket de muestras de viajes.
- Dado que cada documento del bucket de muestras de viajes tiene un campo "type" que indica el tipo de documento, deje "JSON type field" establecido en "type".
- En asignaciones de tipos:
- Pulse "+ Añadir asignación de tipos", y especifique "hotel" como nombre de tipo, ya que el requisito es buscar en todos los documentos de hoteles.
- Se puede acceder a una lista de analizadores disponibles mediante el menú desplegable situado a la derecha del campo de nombre de tipo. Para este caso de uso, deje seleccionado "heredar" para que la asignación de tipos herede el analizador por defecto del índice.
- Dado que el requisito es buscar en todos los campos del documento del hotel, deje "indexar sólo los campos especificados" sin marcar. Si no está marcada, la asignación será dinámica, lo que significa que todos los campos se considerarán disponibles para la indexación.
- Haga clic en Aceptar.
- Por fin, desmarque la casilla situada junto a la correspondencia de tipos "por defecto". Si se deja activado el mapeo por defecto, todos los documentos del bucket se incluyen en el índice, independientemente de si el usuario especifica activamente mapeos de tipo. Sólo se requieren los documentos de hotel, que se incluyen mediante la asignación de tipos de hotel añadida anteriormente.
- Los valores por defecto son suficientes para el resto de paneles contraídos (Analizadores, Filtros personalizados, Analizadores de fecha/hora y Avanzado).
- Las réplicas de índice pueden establecerse en 1, 2 ó 3, siempre que el clúster esté ejecutando el servicio de búsqueda en n+1 nodos. Con un clúster de desarrollo de un solo nodo, mantenga el valor predeterminado de 0.
- Para el tipo de índice, el valor por defecto de "Versión 6.0 (Scorch)" es apropiado para cualquier índice recién creado. Scorch reduce el tamaño del índice en disco y mejora el rendimiento de la indexación y la gestión de mutaciones.
- En este punto, la página de creación de índice debería parecerse a la Figura 5. Haga clic en "Crear índice" para completar el proceso.

Figura 6 - Creación del índice "hotel_dynamic"
Nota: Consulte "Índice: hotel_dynamic" en el Apéndice A para ver la carga útil JSON utilizada para crear este índice a través de la API REST.
Pruebas de consultas sobre el índice:
- En la interfaz de búsqueda de texto completo, espere a que el progreso de indexación muestre 100% y, a continuación, haga clic en el nombre del índice "hotel_dynamic".
- Para buscar cualquier hotel con la palabra clave "granja" en cualquier campo de los documentos del hotel, en el cuadro de texto "buscar en este índice...", introduzca "granja" y haga clic en Buscar. No es necesario delimitar los campos de la búsqueda, ya que todos ellos se incluyen en el índice dinámico..
- Los resultados se muestran (de forma similar a la Figura 7) con la clave de cada documento coincidente.

Figura 7 - Resultados de la búsqueda de "granja" en el índice "hotel_dynamic
4. La misma búsqueda se puede ejecutar a través de la API REST utilizando curl:
|
1 2 3 4 5 6 7 8 9 10 |
rizo -u nombre de usuario:contraseña -XPOST -H "Content-Type: application/json" \ http://localhost:8094/api/index/hotel_dynamic/query \ -d '{ "fields": [ "*" ], "consulta": { "consulta": "granja" } }' |
Apéndice A - Definición del índice JSON
Índice: hotel_desc
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
{ "tipo": "fulltext-index", "nombre": "hotel_desc", "uuid": "", "sourceType": "couchbase", "sourceName": "viaje-muestra", "sourceUUID": "", "planParams": { "maxPartitionsPerPIndex": 171 }, "params": { "doc_config": { "docid_prefix_delim": "", "docid_regexp": "", "mode": "tipo_campo", "tipo_campo": "tipo" }, "mapeo": { "análisis": {}, "default_analyzer": "estándar", "default_datetime_parser": "dateTimeOptional", "default_field": "_todos", "default_mapping": { "dinámico": verdadero, "activado": falso }, "tipo_por_defecto": "_por defecto", "docvalues_dynamic": verdadero, "index_dynamic": verdadero, "store_dynamic": falso, "tipo_campo": "_tipo", "tipos": { "hotel": { "dinámico": falso, "activado": verdadero, "propiedades": { "descripción": { "dinámico": falso, "activado": verdadero, "campos": [ { "índice": verdadero, "nombre": "descripción", "tipo": "texto" } ] } } } } }, "tienda": { "tipo de índice": "chamuscar", "kvStoreName": "" } }, "sourceParams": {} } |
Índice: hotel_mult_fields
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
{ "tipo": "fulltext-index", "nombre": "hotel_mult_fields", "uuid": "", "sourceType": "couchbase", "sourceName": "viaje-muestra", "sourceUUID": "", "planParams": { "maxPartitionsPerPIndex": 171 }, "params": { "doc_config": { "docid_prefix_delim": "", "docid_regexp": "", "mode": "tipo_campo", "tipo_campo": "tipo" }, "mapeo": { "análisis": {}, "default_analyzer": "estándar", "default_datetime_parser": "dateTimeOptional", "default_field": "_todos", "default_mapping": { "dinámico": verdadero, "activado": falso }, "tipo_por_defecto": "_por defecto", "docvalues_dynamic": verdadero, "index_dynamic": verdadero, "store_dynamic": falso, "tipo_campo": "_tipo", "tipos": { "hotel": { "dinámico": falso, "activado": verdadero, "propiedades": { "dirección": { "dinámico": falso, "activado": verdadero, "campos": [ { "incluir_en_todos": verdadero, "include_term_vectors": verdadero, "índice": verdadero, "nombre": "dirección", "tienda": verdadero, "tipo": "texto" } ] }, "alias": { "dinámico": falso, "activado": verdadero, "campos": [ { "incluir_en_todos": verdadero, "include_term_vectors": verdadero, "índice": verdadero, "nombre": "alias", "tienda": verdadero, "tipo": "texto" } ] }, "descripción": { "dinámico": falso, "activado": verdadero, "campos": [ { "incluir_en_todos": verdadero, "include_term_vectors": verdadero, "índice": verdadero, "nombre": "descripción", "tienda": verdadero, "tipo": "texto" } ] }, "nombre": { "dinámico": falso, "activado": verdadero, "campos": [ { "incluir_en_todos": verdadero, "include_term_vectors": verdadero, "índice": verdadero, "nombre": "nombre", "tienda": verdadero, "tipo": "texto" } ] }, "revisiones": { "dinámico": falso, "activado": verdadero, "campos": [ { "incluir_en_todos": verdadero, "include_term_vectors": verdadero, "índice": verdadero, "nombre": "revisiones", "tienda": verdadero, "tipo": "texto" } ] } } } } }, "tienda": { "tipo de índice": "chamuscar", "kvStoreName": "" } }, "sourceParams": {} } |
Índice: hotel_geo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
{ "nombre": "hotel_geo", "tipo": "fulltext-index", "params": { "mapeo": { "tipos": { "hotel": { "activado": verdadero, "dinámico": falso, "propiedades": { "nombre": { "activado": verdadero, "dinámico": falso, "campos": [ { "nombre": "nombre", "tipo": "texto", "tienda": verdadero, "índice": verdadero, "include_term_vectors": falso, "incluir_en_todos": falso } ] }, "geo": { "activado": verdadero, "dinámico": falso, "campos": [ { "nombre": "geo", "tipo": "geopunto", "tienda": verdadero, "índice": verdadero, "include_term_vectors": verdadero, "incluir_en_todos": verdadero } ] } } } }, "default_mapping": { "activado": falso, "dinámico": verdadero }, "tipo_por_defecto": "_por defecto", "default_analyzer": "estándar", "default_datetime_parser": "dateTimeOptional", "default_field": "_todos", "store_dynamic": falso, "index_dynamic": verdadero }, "tienda": { "tipo de índice": "chamuscar", "kvStoreName": "" }, "doc_config": { "mode": "tipo_campo", "tipo_campo": "tipo", "docid_prefix_delim": "", "docid_regexp": "" } }, "sourceType": "couchbase", "sourceName": "viaje-muestra", "sourceUUID": "", "sourceParams": {}, "planParams": { "maxPartitionsPerPIndex": 171, "numReplicas": 0 }, "uuid": "" } |
Índice: hotel_dynamic
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
{ "nombre": "hotel_dynamic", "tipo": "fulltext-index", "params": { "mapeo": { "tipos": { "hotel": { "activado": verdadero, "dinámico": verdadero } }, "default_mapping": { "activado": falso, "dinámico": verdadero }, "tipo_por_defecto": "_por defecto", "default_analyzer": "estándar", "default_datetime_parser": "dateTimeOptional", "default_field": "_todos", "store_dynamic": falso, "index_dynamic": verdadero }, "tienda": { "tipo de índice": "chamuscar", "kvStoreName": "" }, "doc_config": { "mode": "tipo_campo", "tipo_campo": "tipo", "docid_prefix_delim": "", "docid_regexp": "" } }, "sourceType": "couchbase", "sourceName": "viaje-muestra", "sourceUUID": "", "sourceParams": {}, "planParams": { "maxPartitionsPerPIndex": 171, "numReplicas": 0 }, "uuid": "" } |