OpenSearch entrega los resultados mediante un pipeline de tres etapas: análisis de la consulta, coincidencia de documentos y cálculo de puntuación de relevancia. Comprender cada etapa le ayuda a diagnosticar resultados inesperados y ajustar la calidad de las búsquedas.
Cómo funciona
Cuando llega una solicitud de búsqueda, OpenSearch realiza lo siguiente:
Analiza la consulta de búsqueda y la divide en términos con el analizador configurado.
Compara los documentos con esos términos mediante los operadores lógicos de su cláusula de consulta.
Asigna una puntuación a los documentos coincidentes con una expresión de ordenamiento aproximado. Después, reordena los mejores resultados con una expresión de ordenamiento fino.
Devuelve los resultados según los parámetros
startyhit.
Para más detalles sobre los analizadores, consulte Text analyzers.
Control de las coincidencias
Los operadores lógicos determinan qué documentos se recuperan. OpenSearch usa AND de forma predeterminada, por lo que solo devuelve los documentos que contienen todos los términos analizados. Para ampliar o refinar la recuperación, utilice los operadores en su cláusula de consulta.
Operadores y sus efectos
|
Operador |
Ejemplo |
Efecto |
|
(predeterminado) |
|
Recupera los documentos cuyo título contiene tanto "Apple" como "Mobile phone". |
|
AND |
|
Devuelve la intersección: documentos donde el título contiene "Apple" y el campo |
|
OR |
|
Devuelve la unión: documentos donde el título contiene "Apple" o el campo |
|
RANK |
|
Recupera los documentos cuyo título contiene "Apple". Los documentos donde |
|
ANDNOT |
|
Recupera los documentos cuyo título contiene "Apple" y cuyo campo |
La precedencia de los operadores, de mayor a menor, es a continuación: (), ANDNOT, AND, OR, RANK.
Preguntas frecuentes
¿Es posible buscar documentos donde un término específico aparezca al inicio de un campo?
No. OpenSearch no admite la recuperación basada en posiciones. No se pueden restringir los resultados a documentos donde un término como "KFC" aparezca al principio de un campo.
Control de la puntuación y el orden de los resultados
Después de recuperar los documentos, OpenSearch ejecuta un pipeline de puntuación de dos etapas para ordenarlos por relevancia.
El pipeline de dos etapas
Etapa 1: ordenamiento aproximado
OpenSearch puntúa hasta rank_size documentos (un millón de forma predeterminada) con una expresión de ordenamiento aproximado. Esta etapa define qué N documentos principales pasan al ordenamiento fino. Una expresión de ordenamiento aproximado rápida y eficiente reduce la latencia y garantiza que los documentos de alta calidad lleguen a la etapa de ordenamiento fino.
Las expresiones de ordenamiento aproximado suelen usar uno o varios de estos elementos:
Campos simples de índice directo
static_bm25(): puntúa los documentos según la relevancia del textotimeliness(): puntúa los documentos según su antigüedad
Etapa 2: ordenamiento fino
Los N documentos principales del ordenamiento aproximado se vuelven a puntuar con una expresión de ordenamiento fino, que admite operaciones matemáticas y lógicas. En este proceso participan cientos de documentos. Las expresiones de ordenamiento fino combinan la relevancia del texto, la antigüedad, las métricas de negocio y las señales de intervención manual. Tras esta etapa, los resultados se devuelven según la puntuación del ordenamiento fino.
Si la cantidad de documentos por devolver supera N, los documentos restantes se ordenan según su puntuación de ordenamiento aproximado.
Qué significa sort=-RANK
Si no se especifica ninguna cláusula de ordenamiento, OpenSearch utiliza sort=-RANK de forma predeterminada. Esto ordena los documentos de mayor a menor puntuación de relevancia. Para agregar un criterio de desempate, añada un campo de ordenamiento secundario:
sort=-RANK;+bonus
Esto ordena por relevancia descendente y luego por bonus ascendente en los documentos con puntuaciones iguales. Consulte Rough sort functions y Fine sort functions para ver la referencia completa de funciones.
OpenSearch también proporciona esquemas de aplicación y expresiones de ordenamiento integrados. Puede consultarlos y utilizarlos en diversos escenarios.
Ejemplos de expresiones de ordenamiento por sector
A continuación se muestra cómo trabajan en conjunto el ordenamiento aproximado y el ordenamiento fino en distintos casos de uso.
|
Escenario |
Etapa |
Expresión |
Qué puntúa |
|
Foro |
Ordenamiento aproximado |
|
Relevancia del texto |
|
Foro |
Ordenamiento fino |
|
Relevancia del texto ponderada por campo, antigüedad y actividad del hilo (vistas, respuestas) |
|
O2O (en línea a físico) |
Ordenamiento aproximado |
|
Volumen de ventas y puntuación de calidad de la tienda física |
|
O2O (en línea a físico) |
Ordenamiento fino |
|
Volumen de ventas, rendimiento de entrega, distancia, estado de la tienda y reglas de negocio |
|
Ficción |
Ordenamiento aproximado |
|
Relevancia del texto y popularidad |
|
Ficción |
Ordenamiento fino |
|
Relevancia de categoría, título y autor; calidad de la novela; popularidad |
|
Comercio electrónico |
Ordenamiento aproximado |
|
Relevancia del texto, puntuación integral del artículo y vencimiento de la publicación |
|
Comercio electrónico |
Ordenamiento fino |
|
Relevancia del texto, relevancia de la categoría, popularidad, calificaciones del vendedor y estimación de la tasa de clics (CTR) |
Preguntas frecuentes
¿Por qué ocurre el error 2112?
Los campos de la cláusula de consulta deben coincidir con los de la fórmula de ordenamiento fino. Por ejemplo, si la cláusula de consulta es query=default:'keyword' (que se expande a title y body), pero la fórmula es text_relevance(title)+text_relevance(author), se reporta el error 2112 porque author no está en la cláusula de consulta.
¿Por qué text_relevance() no encuentra un campo?
text_relevance() solo admite campos de tipo TEXT y SHORT_TEXT. No se pueden usar campos de otros tipos con esta función.
Mejora del rendimiento de la puntuación
Precalcular fuera de línea las puntuaciones costosas
Las puntuaciones que no dependen de la consulta de búsqueda (como las calificaciones del vendedor, la popularidad o las puntuaciones de calidad) se pueden calcular fuera de línea y almacenar en un campo dedicado, comúnmente llamado general_score). Haga referencia directa a este campo en las expresiones de ordenamiento en lugar de recalcularlo durante la consulta. Esto reduce el procesamiento por consulta y mejora la latencia.
Usar tag_match para puntuar funciones multidimensionales
tag_match(ctr_query_value, doc_value, mul, sum, false, true) aplica un conjunto de operaciones sobre vectores de características a nivel de consulta y de documento. Se usa ampliamente en comercio electrónico para incorporar la estimación de CTR y señales personalizadas en las expresiones de ordenamiento.
Ajustar los pesos de los factores de manera iterativa
La relevancia depende de varios factores. Comience con las expresiones que correspondan a su sector (consulte la tabla anterior) y ajuste el peso de cada factor según la calidad de búsqueda observada. Cambios pequeños en los pesos generan grandes diferencias en el orden de los resultados.