Couchbase Mobile 2.0, introduce potentes capacidades de Búsqueda de Texto Completo (FTS) en tus Documentos JSON. Esto es parte de la nueva interfaz de consulta basada en N1QLel lenguaje de consulta declarativo de Couchbase que extiende SQL para JSON. Si estás familiarizado con SQL, te sentirás como en casa con la semántica de la nueva API.
La búsqueda de texto completo permite realizar consultas en lenguaje natural. Este es el tercero de una serie de posts que discuten la interfaz de consulta en Couchbase Lite. Este blog asume que estás familiarizado con los fundamentos, así que si aún no lo has hecho, asegúrate de revisar la sección entrada anterior primero. Si le interesa, al final de esta entrada encontrará enlaces a blogs en los que se tratan otras características de la interfaz de consulta.
Puede descargar la última versión preliminar de Couchbase Mobile 2.0 desde aquí.
Fondo
Si estabas usando versiones 1.x de Couchbase Mobile, probablemente estés familiarizado con Map-Views para crear índices y consultas. En la versión 2.0, ya no es necesario crear vistas y funciones de mapa. En su lugar, una sencilla interfaz le permite crear índices y puede utilizar una interfaz Query Builder para construir sus consultas. En comparación, la nueva interfaz de consulta es más sencilla de utilizar y mucho más potente. Descubriremos algunas de sus características en este post.
Ejemplo de proyecto
Aunque en los ejemplos que se exponen aquí se utiliza Swift para iOS, tenga en cuenta que, salvo algunas pequeñas diferencias, la misma interfaz de consulta es compatible también con las plataformas Android y Windows.
Así que, con unos pequeños ajustes, deberías poder reutilizar los ejemplos de consulta de este artículo cuando trabajes con otras plataformas.
Siga las instrucciones siguientes si está interesado en un proyecto Swift de muestra
- Clonar el iOS Swift Playground desde GitHub
1$ git clonar https://github.com/couchbaselabs/couchbase-lite-ios-api-playground - Siga las instrucciones de instalación en el LÉAME para construir y ejecutar la zona de juegos.
Modelo de datos de muestra
Utilizaremos la base de datos de muestras de viajes aquí. Puede incrustar esta base de datos preconstruida en su aplicación móvil y empezar a utilizarla para sus consultas.
El conjunto de datos de la muestra incluye varios tipos de documentos identificados por el tipo
del documento. Nos centraremos en documentos de tipo
"hito" . A continuación se muestra el modelo de documento JSON. Por brevedad, hemos omitido algunas de las propiedades que no son relevantes para este post del modelo a continuación.
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 |
{ "actividad": "ver", "dirección": "84 rue Claude Monet", "alt": "Fundación Claude Monet", "ciudad": "Giverny", "contenido": "La casa, de estilo oriental, es discretamente excéntrica y muy interesante, e incluye la colección de [http://www.intermonet.com/japan/ grabados japoneses] de Monet. No hay pinturas originales de Monet en el sitio - la verdadera tarjeta de atracción, son los jardines alrededor de la casa ...", "país": "Francia, "direcciones": null, "email": null, "geo": { "exactitud": "TECHO", "lat": 49.0753489, "lon": 1.5337884 }, "horas": "Abierto de abril a octubre, de lunes a domingo, de 9.30 a 18.00 horas., "id": 10061, "imagen": null, "nombre": "La casa de Monet", "teléfono": "+33 232512821", "precio": "9 euros, $5 estudiantes, 4 4,00 minusválidos, menores de 7 años gratis", "estado": "Alta Normandía", "título: "Giverny", "tollfree": null, "tipo": "hito", "url": "http://www.fondation-monet.com/" } |
** Consulte el modelo anterior para cada uno de los ejemplos de consulta a continuación. **
El asa de la base de datos
En las consultas siguientes, utilizaremos la función Base de datos
API para abrir/crear Base de Datos CouchbaseLite.
1 2 |
var opciones = Configuración de la base de datos() deje db = pruebe Base de datos(nombre: kDBName, config: opciones) |
Conceptos básicos
La búsqueda de texto completo permite realizar consultas en lenguaje natural. En nuestro post sobre la Fundamentos de la consultadiscutimos el como y regex para operaciones de concordancia de patrones. FTS supera esa capacidad al permitir la compatibilidad con de origen, clasificación por relevancia y consultas en lenguaje natural específicas de la localidad.
Las búsquedas de texto completo son no distingue mayúsculas de minúsculas y utilizar el match
expresión de consulta. Para realizar FTS, debe crear Índice de texto completo en las propiedades apropiadas. Puede crear índices en una o varias propiedades.
Stemming
Antes de pasar a los ejemplos, hablemos de la separación de palabras. Se trata de reducir las palabras a su raíz. Así, para instancia"gatuno", "gatuno" y "gatos" se reducen a la palabra "gato". Así, la búsqueda del término "gatos" nos daría resultados que coincidirían con "gatuno", "gatuno" y así sucesivamente.
Couchbase Lite actualmente soporta Stemming en los siguientes idiomas
* danish
* dutch
* español
* finlandés
* francés
* alemán
* húngaro
* italiano
* noruego
* portugués
* rumano
* ruso
* español
* sueco
* turco
Si no se utiliza ningún idioma específico, el tokenizador seguirá dividiendo el texto en palabras a partir de los caracteres Unicode de espacio en blanco. Así que debería funcionar, aunque menos bien, con cualquier idioma que ponga espacios entre palabras.
Índice de texto completo
En nombre
que se asocia al índice durante la creación es importante. Los ejemplos de consulta que veremos más adelante harán referencia al índice apropiado mediante el nombre
Índice de propiedades individuales
El siguiente ejemplo crea un fullTextIndex
en el "contenido" propiedad de un Documento
. El "stemming" está activado por defecto y se asume que la configuración regional es la del dispositivo. Aunque no se muestra a continuación, también tiene la opción de especificar si los "acentos" deben ignorarse o no mediante la opción ignoreAccents
opción. Por defecto, los acentos no se ignoran.
1 2 |
deje ftsIndex = IndexBuilder.fullTextIndex(artículos: FullTextIndexItem.propiedad("contenido")) pruebe db.createIndex(ftsIndex,withName: "ContentFTSIndex") |
Índice de propiedades múltiples
El siguiente ejemplo crea un fullTextIndex
en "contenido" y "nombre" propiedades de un Documento
1 2 |
deje ftsIndex = IndexBuilder.fullTextIndex(artículos: FullTextIndexItem.propiedad("contenido"),FullTextIndexItem.propiedad("nombre")) pruebe db.createIndex(ftsIndex,withName: "ContentAndNameFTSIndex") |
Índice sin stemming
El siguiente ejemplo crea un fullTextIndex
en el "contenido" propiedad de un Documento
con el stemming desactivado. El stemming se activa por defecto utilizando la configuración actual del idioma del dispositivo. Si el idioma es nulo, se desactiva el stemming.
1 2 |
deje ftsIndex = IndexBuilder.fullTextIndex(artículos: FullTextIndexItem.propiedad("contenido")).idioma(nil) pruebe db.createIndex(ftsIndex,withName: "ContenidoFTSIndexNoStemming") |
Búsqueda FTS con stemming
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan el término "Mecánica" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.
Solicitar
1 2 3 4 5 6 7 8 9 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContentFTSIndex") deje searchQuery = Constructor de consultas .seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde( Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("Mecánica"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá documentos que contengan los términos "mecánico", "mecanismo", "mecanismos", "mecánico", etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[ { "id": "landmark_21703", "contenido": "El fabricante suizo de relojes de lujo, fundado en 1851, es conocido por su mecánica precisa". }, { "id": "hito_2592", "contenido": "Aquí podrá ver los mecanismos que impulsan los famosos teleféricos de San Francisco, así como multitud de recuerdos e información sobre la historia de los teleféricos". }, { "id": "hito_26144", "contenido": "Esta pintoresca sección del Área Recreativa Nacional Golden Gate es una de las favoritas de excursionistas, ciclistas y playeros, con escarpadas tierras altas costeras y profundas dunas de arena. El ala delta es muy popular aquí, con varias tiendas de este deporte en la zona. Cerca se encuentran los restos de Battery Davis, un mecanismo de defensa militar de la época de la Segunda Guerra Mundial". }, { "id": "hito_33234", "contenido": "Asador al estilo del Oeste con un enorme bar "campestre" e incluso un toro mecánico para los que estén dispuestos a vivir una falsa aventura a lomos de un toro. El menú es amplio y sorprendentemente económico. Y de nuevo, el saloon es desde hace tiempo un destino de moda en Sunset Strip para pasar buenos ratos". } ] |
Búsqueda FTS sin Stemming
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contienen el término exacto "Mecánica" en el "contenido" propiedad. Utilizamos la "ContenidoFTSIndexNoStemming" que se creó anteriormente y que especificaba la opción de desactivar el stemming.
Solicitar
1 2 3 4 5 6 7 8 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContenidoFTSIndexNoStemming") deje searchQuery = Constructor de consultas .seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("Mecánica"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá documentos que contengan exactamente el término "mecánico". Tenga en cuenta de nuevo que todas las búsquedas son insensibles a mayúsculas y minúsculas.
1 2 3 4 5 6 7 |
[ { "id": "hito_33234", "contenido": "Asador al estilo del Oeste con un enorme bar "campestre" e incluso un toro mecánico para los que estén dispuestos a vivir una falsa aventura a lomos de un toro. El menú es amplio y sorprendentemente económico. Y de nuevo, el saloon es desde hace tiempo un destino de moda en Sunset Strip para pasar buenos ratos". } ] |
Búsqueda FTS en varias propiedades
La siguiente consulta recupera los id , nombre y contenido propiedades de "hito" tipo
documentos que contengan el término "Mecánica" en el "nombre" o el "contenido" propiedad. Utilizamos la "ContentAndNameFTSIndex" creado anteriormente. Este índice permitía indexar el "nombre" y "contenido" propiedades
Solicitar
1 2 3 4 5 6 7 8 9 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContentAndNameFTSIndex") deje searchQuery = Constructor de consultas .seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("nombre")), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("Mecánica"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá los documentos que contengan el término "mecánico" (o sus variantes derivadas por stemming) en la propiedad "nombre" o "contenido".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "hito_10062", "nombre": "Museo de Mecánica Natural", "contenido": " Fundada por los hermanos Guillemard: Jean-pierre, René y Gérard dirigen actualmente las restauraciones y exposiciones con la ayuda de un equipo de entusiastas que dedican su tiempo y saber hacer a la conservación del Patrimonio. El origen del museo es una colección privada de máquinas de combustión interna de vapor; fundada en 1955 por la familia Guillemard, residente en GIVERNY desde hace generaciones." }, { "id": "landmark_21703", "nombre": "Salones Patek Philippe", "contenido": "El fabricante suizo de relojes de lujo, fundado en 1851, es conocido por su mecánica precisa". }, { "id": "hito_25929", "nombre": "Museo del Teleférico", "contenido": "Aquí podrá ver los mecanismos que impulsan los famosos teleféricos de San Francisco, así como multitud de recuerdos e información sobre la historia de los teleféricos" }, { "id": "hito_26144", "nombre": "Fuerte Funston", "contenido": "Esta pintoresca sección del Área Recreativa Nacional Golden Gate es una de las favoritas de excursionistas, ciclistas y playeros, con escarpadas tierras altas costeras y profundas dunas de arena. El ala delta es muy popular aquí, con varias tiendas de este deporte en la zona. Cerca se encuentran los restos de Battery Davis, un mecanismo de defensa militar de la época de la Segunda Guerra Mundial" } ] |
Búsqueda FTS con expresiones lógicas
En un ejemplo anterior, has visto que desactivando el stemming, puedes buscar la cadena de búsqueda exacta. Pero, ¿y si quiere buscar más de un término de búsqueda? En match
acepta expresiones lógicas como AND y OR.
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan el término "Mecánica" o "Mecanismo" en el "contenido" propiedad. Utilizamos la "ContenidoFTSIndexNoStemming" que se creó anteriormente para desactivar el stemming.
Solicitar
1 2 3 4 5 6 7 8 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContenidoFTSIndexNoStemming") deje searchQuery = Constructor de consultas .seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("Mecanismo OR mecánico"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá los documentos que contengan exactamente los términos "mecánico" o "mecanismo" en la propiedad "contenido".
1 2 3 4 5 6 7 8 9 10 11 |
[ { "id": "hito_26144", "contenido": "Esta pintoresca sección del Área Recreativa Nacional Golden Gate es una de las favoritas de excursionistas, ciclistas y playeros, con escarpadas tierras altas costeras y profundas dunas de arena. El ala delta es muy popular aquí, con varias tiendas de este deporte en la zona. Cerca se encuentran los restos de Battery Davis, un mecanismo de defensa militar de la época de la Segunda Guerra Mundial" }, { "id": "hito_33234", "contenido": "Asador al estilo del Oeste con un enorme bar "campestre" e incluso un toro mecánico para los que estén dispuestos a vivir una falsa aventura a lomos de un toro. El menú es amplio y sorprendentemente económico. Y de nuevo, el saloon es desde hace tiempo un destino de moda en Sunset Strip para pasar buenos ratos". } ] |
Búsqueda FTS con expresión Wilcard
Puede utilizar el carácter "*" en la cadena de búsqueda para representar coincidencias de cero o más caracteres.
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan el término "walt*" en el "contenido" propiedad. Esto coincidirá con todos los términos de búsqueda que empiecen por "walt" seguido de cero o más caracteres. Utilizamos la propiedad "ContentFTSIndex" que se creó anteriormente.
NOTA: Se podría argumentar que el uso de comodines en el término de búsqueda podría ser una forma ingenua de aplicar la derivación. Pero entonces se puede acabar con formas derivadas que pueden no corresponder a los términos derivados mediante stemming. Así que es preferible utilizar stemming si eso es lo que necesita.
Solicitar
1 2 3 4 5 6 7 8 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContentFTSIndex") deje searchQuery = Constructor de consultas .seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("walt*"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá documentos que contengan los términos "walt", "Walter", "Waltham", "Walthamstow", etc.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "hito_10134", "contenido": "En la visita guiada a Ibrox, se accede al vestuario local y se escucha un mensaje grabado de Walter Smith y Ally McCoist antes de subir la escalera de mármol, visitar la ilustre sala de trofeos, la sala azul y el despacho del entrenador. Las entradas, excepto para los partidos contra el Celtic, están disponibles en línea en el sitio web del club, en el centro de venta de entradas del estadio y en los puntos de venta del club en las tiendas JJB Sports del centro de Glasgow". }, { "id": "hito_16104", "contenido": "Presenta la historia de Waltham Forest. El edificio se construyó para ser una casa de trabajo y desde entonces se ha utilizado como comisaría de policía y vivienda particular. Su colección incluye el coche Bremer, construido por el ingeniero Frederick Bremer en 1892, que tiene la pretensión de ser el primer coche de gasolina fabricado en Gran Bretaña". }, { "id": "hito_16105", "contenido": "El antiguo núcleo de la actual Walthamstow giraba en torno a la iglesia de Santa María, del siglo XII". }, { "id": "hito_16574", "contenido": "El Dorothy Chandler Pavilion está abierto al público el día de Nochebuena con actuaciones casi ininterrumpidas de grupos culturales amateurs. El Walt Disney Hall ofrece visitas diarias, consulte los horarios en la página web." }, { "id": "hito_8631", "contenido ": "Museo sobre autores escoceses famosos, centrado en Robert Burns, Sir Walter Scott y Robert Louis Stevenson " } ] |
Búsqueda FTS con palabras clave
Las stop words son palabras comunes en un idioma. En inglés, serían términos como "the", "is", "and" , "which", etc.
Ejemplo 1: La cadena de búsqueda contiene palabras vacías
Couchbase Lite ignora las palabras de parada que aparecen en la cadena de búsqueda.
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan el término "en la historia" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.
Couchbase Lite ignora las palabras de parada "on" y "the", por lo que obtendrá documentos que sólo incluyan el término "history" y las formas derivadas de la palabra raíz
Solicitar
1 2 3 4 5 6 7 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContentFTSIndex") deje searchQuery = Constructor de consultas.seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("en la historia"))) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá los documentos que contengan los términos "historia" y las formas derivadas de esta palabra, como "histórico".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "id": "hito_10019", "contenido": "Museo sobre ingeniería militar e historia del Imperio Británico. Una colección bastante extensa que se tarda medio día en ver. De lo más interesante para los aficionados a la historia británica y militar o a la ingeniería civil". }, { "id": "hito_10083", "contenido": " Las visitas duran unos 45 minutos. Frente al edificio, George Square, el centro teórico de la ciudad, está poblada por varias estatuas de líderes cívicos y personajes famosos de la historia, y se utiliza a menudo para eventos al aire libre". }, { "id": "hito_10093", "contenido": "El auditorio ha adquirido cierta fama mundial por ser el lugar donde se grabó la audición de Susan Boyle, uno de los videoclips de YouTube más descargados de la historia". }, { "id": "hito_10101", "contenido": "Este museo tiene una gran colección de artefactos y exposiciones que muestran la historia de la ciudad. Si no quieres pagar para entrar en el museo en sí, puedes simplemente entrar en el edificio (que contiene tres museos separados) y mirar algunas fotografías históricas en las paredes del atrio." }, { "id": "hito_10105", "contenido": "El Peoples Palace es un gran museo folclórico, que cuenta la historia de Glasgow y su gente, desde varias perspectivas, mostrando detalles de la vida en Glasgow (incluyendo una de las botas bananeras de Billy Connolly). El Winter Gardens, adyacente, es un agradable invernadero con una cafetería razonable)". } ] |
Ejemplo 2: Ignorar las palabras vacías en la búsqueda
Por defecto, Couchbase Lite ignora las palabras de parada dentro del contenido de la búsqueda.
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan los términos "aleta azul aleta amarilla" en el "contenido" propiedad. Utilizamos la "ContentFTSIndex" que se creó anteriormente.
Couchbase Lite ignora las palabras de parada durante la búsqueda, por lo que obtendría documentos que incluyeran los términos "azul", "aleta" y "amarillo" en ese orden, separados por cualquier número de palabras de parada.
Solicitar
1 2 3 4 5 6 7 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContentFTSIndex") deje searchQuery = Constructor de consultas.seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("aleta azul aleta amarilla"))) .límite(Expresión.int(límite))<código clase="swift"> |
Muestra de respuesta
La respuesta a la consulta anterior incluirá documentos que contengan los términos "azul", "aleta" y "amarillo" separados por cualquier número de palabras de parada, como "aleta azul y aleta amarilla".
1 2 3 4 5 6 7 |
[ { "id": "hito_18840", "contenido": "Este gran acuario está especializado en la exhibición de la vida marina local en hábitats típicos de la zona, y cuenta con muchas exposiciones espectaculares. Es especialmente conocido por su exhibición Kelp Forest, de tres pisos de altura, repleta de diversas variedades de algas gigantes y una gran variedad de especies animales marinas, y también por su exhibición Open Sea, de un millón de galones, con grandes atunes de aleta azul y amarilla, mahi-mahis, tiburones (incluido un gran tiburón blanco ocasional como visitante muy temporal, antes de ser devuelto al océano), peces luna (mola-molas) y tortugas marinas. Las mejores exhibiciones incluyen un gran tanque de sardinas plateadas que nadan sin parar por encima de la cabeza, y una de nutrias marinas rescatadas consideradas irrecuperables en la naturaleza y, por tanto, mantenidas en el acuario. )" } ] |
Búsqueda FTS con clasificación
Puede utilizar la función FunciónTextoCompleto.rank
para especificar el orden de clasificación de los resultados de la búsqueda. Esto es útil para clasificar las coincidencias por orden de mejor coincidencia.
La siguiente consulta recupera los id y contenido propiedades de "hito" tipo
documentos que contengan el término "atraer" en el "contenido" propiedad. Los documentos se ordenan en orden descendente según su rango, lo que significa que el documento con el mayor número de coincidencias se ordena por encima del resto.
Solicitar
1 2 3 4 5 6 7 8 |
deje ftsExpression = ExpresiónTextoCompleto.índice("ContenidoFTSIndexNoStemming") deje searchQuery = Constructor de consultas.seleccione(SeleccionarResultado.expresión(Meta.id), SeleccionarResultado.expresión(Expresión.propiedad("contenido"))) .de(Fuente de datos.base de datos(db)) .donde(Expresión.propiedad("tipo").equalTo(Expresión.cadena ("hito")) .y( ftsExpression.match("atraer"))) .orderBy(Pedidos.expresión(FunciónTextoCompleto.rango("ContenidoFTSIndexNoStemming")).descendente()) .límite(Expresión.int(límite)) |
Muestra de respuesta
La respuesta a la consulta anterior incluirá los documentos que incluyan el término "atraer" o sus versiones derivadas. Los documentos con el mayor número de coincidencias se clasifican en orden superior.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[ { "id": "hito_22056", "contenido": "La atracción de visitantes de pago más importante de Gales, que incluye una granja, un parque de atracciones de época cubierto, un zoo y juegos de aventura cubiertos y al aire libre. Atracción familiar para todo tiempo con 50% de atracciones bajo techo". }, { "id": "hito_16309", "contenido": "La Experiencia del Puente de Londres y las Tumbas de Londres son dos atracciones de miedo por un solo precio y han sido votadas durante tres años consecutivos como la mejor atracción de miedo del Reino Unido durante todo el año". }, { "id": "hito_25216", "contenido": "TA parque de atracciones junto al mar situado cerca del extremo sur de Mission Beach, Belmont Park es un lugar emblemático con varias tiendas, restaurantes, una sala de máquinas recreativas y un montón de atracciones. La gran atracción es el Giant Dipper, una montaña rusa histórica que es una de las dos únicas montañas rusas frente al mar que siguen funcionando en la costa oeste. Entre las demás atracciones hay un FlowRider (una atracción de olas simuladas en la que se puede hacer bodyboard), un carrusel antiguo, coches de choque, toboganes, atracciones pendulares, tilt-a-whirl y un trampolín " }, { "id": "hito_1059", "contenido": "Su objetivo es contar la historia del vuelo a lo largo del siglo XX y cuenta con una gran colección de aviones, entre ellos el Concorde G-BOAA de British Airways. Otra atracción bastante buena (y que merece la pena ver) es el De-Havilland Comet 4C, un derivado del primer avión de pasajeros del mundo". } ] |
Limitaciones
Aunque la capacidad de FTS en Couchbase Lite 2.0 es extremadamente potente y sería suficiente para los casos de uso típicos en una base de datos integrada, hay algunas limitaciones
- La expresión de coincidencia sólo puede estar en el nivel superior o en la expresión AND del nivel superior. Esto significa que la siguiente expresión no está permitida ftsExpression.match("atraer").or(ftsExpression2.match("museo"))
- Tokenizadores lingüísticos personalizados
La lista de idiomas soportados se especificó anteriormente. En el momento de escribir este post, no es posible conectar un tokenizador personalizado para ampliar la compatibilidad a otros idiomas. - Soporte de búsqueda difusa
No podemos especificar un factor de "imprecisión" en la consulta que pueda dar lugar a que se consideren coincidencias menos relevantes. - Facetas
No hay soporte para la búsqueda facetada
Ten en cuenta que Couchbase Lite es una base de datos integrada. Así que se podría argumentar que las capacidades de FTS no tienen que ser tan extensas como una implementación de base de datos del lado del servidor. El soporte para estas será evaluado en futuras versiones.
¿Qué sigue?
Esta entrada de blog muestra cómo puedes aprovechar las capacidades de Búsqueda de Texto Completo (FTS) en la nueva API de Consulta en Couchbase Mobile 2.0. Esto es un comienzo. Espera ver más funcionalidades en futuras versiones. Puedes descargar la última versión de nuestra descargas página.
Aquí hay algunos otros posts relacionados con Couchbase Mobile Query que pueden ser de interés
- Este entrada del blog analiza los fundamentos
- Este entrada del blog explica cómo consultar colecciones de matrices
- Este entrada del blog explica cómo realizar consultas JOIN
Si tiene alguna pregunta o sugerencia, deje un comentario a continuación o póngase en contacto conmigo en Twitter @rajagp o envíeme un correo electrónico priya.rajagopal@couchbase.com. En Foros de Couchbase son otro buen lugar para plantear preguntas.