Definición
autocompleteEl operador
autocompleterealiza una búsqueda de una palabra o frase que contiene una secuencia de caracteres de una string de entrada incompleta. Los campos que deseas consultar con el operadorautocompletedeben estar indexados con el tipo de dato de autocompletado en la definición de índice de la colección. Para obtener información sobre cómo configurar tu índice para autocompletar, consulta Cómo indexar campos para autocompletar.
Nota
MongoDB Search podría devolver resultados inexactos para consultas con más de tres palabras en una sola string.
Casos de uso de muestra
Se puede utilizar el operador autocomplete con aplicaciones de búsqueda mientras escribe para predecir palabras con precisión creciente a medida que se ingresan caracteres en el campo de búsqueda de la aplicación. autocomplete devuelve resultados que contienen palabras predichas según la estrategia de tokenización especificada en la definición de índice para la autocompletación.
Si desea compilar sugerencias o menús desplegables utilizando el operador autocomplete de MongoDB Search, le recomendamos que consultar una colección de términos de búsqueda sugeridos o utilice términos de búsqueda anteriores para completar el menú desplegable. Si creas una colección separada de términos de búsqueda sugeridos, puedes definir mapeos de sinónimos en tu índice de MongoDB Search para buscar en tu colección las palabras exactas o alternativas.
Sintaxis
autocomplete tiene la siguiente sintaxis:
1 { 2 $search: { 3 "index": "<index name>", // optional, defaults to "default" 4 "autocomplete": { 5 "query": "<search-string>", 6 "path": "<field-to-search>", 7 "tokenOrder": "any|sequential", 8 "fuzzy": <options>, 9 "score": <options> 10 } 11 } 12 }
opciones
Campo | Tipo | Descripción | Necesidad | predeterminado | ||||
|---|---|---|---|---|---|---|---|---|
| string o arreglo de strings | string o strings que se buscarán. Si hay varios términos en una string, MongoDB Search también busca una coincidencia para cada término de la string por separado. | Sí | |||||
| string | Campo indexado para buscar. Este campo debe indexarse como el tipo de dato El operador Para obtener un ejemplo de una consulta del operador | Sí | |||||
| Objeto | Habilita la búsqueda difusa. Encuentra cadenas similares al término o términos de búsqueda. | no | |||||
| entero | El número máximo de ediciones de un solo carácter requeridas para coincidir con el término de búsqueda especificado. El valor puede ser | no |
| ||||
| entero | Número de caracteres al principio de cada término en el resultado que debe coincidir exactamente. | no |
| ||||
| entero | Cantidad máxima de variaciones a generar y para búsqueda. Este límite aplica por token. | no |
| ||||
| Objeto | Puntuación que asignar a los resultados de los términos de búsqueda coincidentes. Utilice una de las siguientes opciones para modificar la puntuación por defecto:
Para obtener información sobre cómo usar | no | |||||
| string | Orden en el que se realiza la búsqueda de tokens. El valor puede ser uno de los siguientes:
| no |
|
Comportamiento de la puntuación
Por defecto, el texto operador utiliza el algoritmo de similitud bm25 para puntuar los documentos según su relevancia con respecto a la query.
Puede cambiar el algoritmo de similitud que se utiliza especificando un algoritmo de similitud diferente en la propiedad similarity.type para los campos autocomplete en su definición de índice de MongoDB Search. Para aprender a configurar un índice de MongoDB Search para el tipo autocomplete, se puede consultar Cómo indexar campos de string.
Para obtener más información sobre los algoritmos de similitud admitidos, consulta Detalles de la puntuación.
Los resultados de la query del operador autocomplete que son coincidencias exactas reciben una puntuación más baja que los resultados que no son coincidencias exactas. MongoDB Search no puede determinar si una string del query coincide exactamente con un texto indexado si se especifican solo los subcadenas de tokens indexados para autocompletado. Para puntuar más alto los resultados exactos, intente la siguiente solución alternativa:
Nota
La siguiente solución alternativa no garantiza puntuaciones más altas para coincidencias exactas en todos los casos.
Indexa el campo como tipo autocompletar y como tipo string.
MongoDB Search
autocompleteaumenta las coincidencias exactas cuando un campoautocompletetambién está indexado como unstring, aumentando así la puntuación de coincidencias exactas.Query usando el operador compuesto.
Para ver una demostración de esta solución alternativa, consulte la sección "Búsqueda en varios campos".
Ejemplos
Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix. Si cargaste el conjunto de datos de muestra en el clúster, puedes crear el índice estático para el autocompletado y ejecutar las consultas de ejemplo en el clúster.
Definición del índice
Las siguientes pestañas contienen muestras de definiciones de índices para las edgeGram, rightEdgeGram y nGram estrategias de tokenización. Además del tipo autocompletar, las definiciones de índice de muestra incluyen los tipos string y token en el campo title.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "edgeGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "edgeGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "rightEdgeGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "rightEdgeGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": [ 6 { 7 "type": "token" 8 }, 9 { 10 "type": "string" 11 }, 12 { 13 "foldDiacritics": false, 14 "maxGrams": 7, 15 "minGrams": 3, 16 "tokenization": "nGram", 17 "type": "autocomplete" 18 } 19 ], 20 "plot": [ 21 { 22 "type": "autocomplete", 23 "tokenization": "nGram", 24 "minGrams": 2, 25 "maxGrams": 15, 26 "foldDiacritics": true 27 } 28 ] 29 } 30 } 31 }
➤ Utilice el menú desplegable Seleccione su lenguaje para establecer el idioma del ejemplo en esta página.
Ejemplo básico
La siguiente query busca películas con los caracteres off en el campo title.
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Ejemplo borroso
Ejemplo básico
La siguiente query busca películas con los caracteres pre en el campo title. La consulta utiliza:
Campo | Descripción |
| Indica que solo se permite una variación de carácter en la string del query |
| Indica que el primer carácter en |
| Indica que se pueden considerar hasta doscientos cincuenta y seis términos similares para |
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Ejemplo de coincidencia parcial
Las siguientes queries demuestran cómo buscar en los campos especificados una palabra o frase que contenga la secuencia de caracteres que se indique en la query.
Ejemplo de orden de tokens
Las siguientes queries buscan películas con los caracteres men with en el campo title. Las queries también utilizan el campo tokenOrder, que especifica si la query busca tokens en el orden any o en el orden sequential.
Comienza con ejemplo
Puede buscar el campo title por títulos de películas que comiencen con un término o frase indexando el campo usando el analizador de palabras clave.
Debe indexar el campo utilizando el analizador con la estrategia de tokenización edgeGram para recuperar resultados de la siguiente query de muestra. Si indexas el campo usando cualquier otra funcionalidades incorporadas, MongoDB Search no devuelve ningún resultado porque no indexa tu campo de texto como un único término. La estrategia de tokenización edgeGram crea tokens empezando por el lado izquierdo de las palabras.
También debe configurar foldDiacritics en true para obtener resultados que no dependan de mayúsculas ni minúsculas. Si configuras foldDiacritics a false, la distinción entre mayúsculas y minúsculas del término de query debe coincidir exactamente con la distinción entre mayúsculas y minúsculas en el documento para que MongoDB Search devuelva algún resultado.
{ "mappings": { "dynamic": false, "fields": { "title": [ { "type": "token" }, { "type": "string" }, { "foldDiacritics": true, "maxGrams": 7, "minGrams": 3, "analyzer": "lucene.keyword", "tokenization": "edgeGram", "type": "autocomplete" }] } } }
La siguiente query busca títulos de películas que comiencen con el término Fast &.
Ejemplosimple any
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Ejemplosimple sequential
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Ejemplo de resaltado
La query siguiente busca los caracteres ger en el campo title de la colección movies, con la opción highlight habilitada para el campo title.
Importante
Para resaltar la versión indexada de autocompletado de una ruta, el operador de autocompletado debe ser el único operador que use esa ruta en la query.
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Búsqueda en varios campos
La siguiente consulta busca en los campos title y plot de la colección movies palabras que comiencen con la cadena de caracteres inter mediante el operador compuesto.
Nota
Los resultados pueden variar
MongoDB Search devuelve resultados diferentes dependiendo de la estrategia de tokenización configurada en la definición del índice para el tipo autocompletar. Para obtener más información, consulta Cómo indexar campos para autocompletado.
Resultados de buckets mediante consultas facetadas
Obtén más información
Para obtener más información, se debe consultar Cómo ejecutar consultas de MongoDB Search con autocompletar y coincidencia parcial.