Cuando los resultados de búsqueda no coinciden con lo esperado, el problema suele deberse a tres factores: cómo se analiza la consulta para obtener términos, cómo esos términos coinciden con los documentos y cómo se puntúan y ordenan los documentos coincidentes. Este tema explica cada factor y cómo ajustar OpenSearch para devolver los resultados que sus usuarios esperan.
Método de análisis
El análisis de consultas es el primer paso de toda búsqueda. OpenSearch divide la consulta de búsqueda en términos individuales antes de iniciar la coincidencia. Para conocer los analizadores disponibles y cómo configurarlos, consulte Analizadores integrados.
Método de coincidencia
Funcionamiento
Después del análisis, OpenSearch utiliza los términos resultantes para recuperar documentos. De forma predeterminada, solo se devuelven los documentos que contienen todos los términos, ya que el operador predeterminado es AND.
OpenSearch admite cinco operadores lógicos para construir cláusulas de consulta:
|
Operador lógico |
Sintaxis |
Resultado |
|
(AND predeterminado) |
|
Devuelve los documentos cuyo título contiene tanto Apple como Mobile phone. |
|
AND |
|
Devuelve la intersección: el título contiene Apple y cate contiene Mobile phone. |
|
OR |
|
Devuelve la unión: el título contiene Apple o cate contiene Mobile phone. |
|
RANK |
|
Devuelve los documentos cuyo título contiene Apple; los que además tienen Mobile phone en cate reciben una puntuación mayor. |
|
ANDNOT |
|
Devuelve los documentos cuyo título contiene Apple y donde cate no contiene Mobile phone. |
La prioridad de los operadores, en orden descendente, es la siguiente: () > ANDNOT > AND > OR > RANK.
Para ver la sintaxis completa de las consultas, consulte Cláusula de consulta.
Preguntas frecuentes
Mi documento contiene "Eat the Meal" y se devuelve cuando busco "Eat" o "Eat the Meal". ¿Por qué no aparece si busco "You Eat the Meal"?
OpenSearch solo devuelve los documentos que contienen todos los términos analizados. El término "You" no aparece en su documento, por lo que no hay coincidencia. Para resolverlo, configure el análisis de consultas y ajuste la forma en que se divide la consulta antes de la coincidencia.
¿Puedo buscar documentos que comiencen con un término específico, como "KFC"?
No. OpenSearch no admite la recuperación basada en la posición de un término dentro de un documento.
Cálculo de puntuación basado en relevancia
Funcionamiento
OpenSearch utiliza una canalización de puntuación de dos fases para equilibrar velocidad y precisión:
Ordenamiento aproximado: puntúa todos los documentos candidatos mediante una expresión rápida. La cantidad de documentos evaluados en esta fase equivale al valor del parámetro
rank_size, que es de un millón. El objetivo es identificar rápidamente los candidatos de alta calidad para la siguiente fase.Ordenamiento fino: vuelve a puntuar los N mejores documentos del ordenamiento aproximado con una expresión más detallada. En esta etapa participan cientos de documentos. Los resultados finales se devuelven según los parámetros
startyhit. Si la cantidad de resultados solicitados supera N, los restantes conservan la puntuación del ordenamiento aproximado.
Comportamiento de ordenamiento predeterminado
Si no se especifica ninguna cláusula de ordenamiento, OpenSearch aplica de forma predeterminada sort=-RANK, lo que ordena los resultados por puntuación de relevancia en orden descendente. Para ordenar por varias dimensiones, encadene las cláusulas. Por ejemplo, sort=-RANK;+bonus ordena primero por relevancia y luego por bonus en orden ascendente cuando las puntuaciones son iguales.
RANK se puede aplicar en una expresión de ordenamiento aproximado o en una expresión de ordenamiento fino.
Expresiones de ordenamiento aproximado
El ordenamiento aproximado afecta tanto la latencia como la calidad de los resultados, ya que solo los documentos que superan esta fase llegan al ordenamiento fino. Mantenga estas expresiones simples y rápidas. Componentes compatibles:
Índices directos (valores de campo simples).
static_bm25(): puntuación de relevancia de texto basada en BM25.timeliness(): puntuación de actualidad basada en un campo de marca de tiempo.
Expresiones de ordenamiento fino
Las expresiones de ordenamiento fino admiten operaciones matemáticas y lógicas, y tienen acceso a una biblioteca completa de funciones integradas. Utilice este ordenamiento para capturar señales complejas, como la relevancia de texto en varios campos, la distancia, las métricas de interacción y las reglas de negocio.
Ejemplos de expresiones de ordenamiento
OpenSearch proporciona esquemas y expresiones integrados para escenarios comunes. A continuación se muestra cómo trabajan en conjunto las expresiones de ordenamiento aproximado y fino:
|
Escenario |
Expresión |
Señales |
|
Foro: ordenamiento aproximado |
|
Relevancia de texto |
|
Foro: ordenamiento fino |
|
Relevancia de texto, actualidad, interacción (fijados, respuestas, vistas) |
|
O2O (en línea a físico): ordenamiento aproximado |
|
Volumen de ventas, puntuación general de la tienda (precalculada fuera de línea) |
|
O2O: ordenamiento fino |
|
Volumen de ventas, velocidad de entrega, puntualidad, distancia, disponibilidad, estado operativo |
|
Ficción: ordenamiento aproximado |
|
Relevancia de texto, popularidad |
|
Ficción: ordenamiento fino |
|
Relevancia de categoría, título y autor; calidad del contenido; popularidad |
|
Comercio electrónico: ordenamiento aproximado |
|
Relevancia de texto, puntuación general del producto, vencimiento de la publicación |
|
Comercio electrónico: ordenamiento fino |
|
Relevancia de título y categoría, popularidad, calificaciones del vendedor, estimación de tasa de clics (CTR), reglas de función |
Preguntas frecuentes
¿Por qué text_relevance(seller_id) no encuentra el campo?
text_relevance() solo funciona con campos de tipo TEXT o SHORT_TEXT. Si seller_id tiene otro tipo, la función no lo procesa.
¿Por qué se reporta el error 2112?
El error 2112 ocurre cuando los campos de la expresión de ordenamiento no coinciden con los de la cláusula de consulta. Por ejemplo, si la cláusula es query=default:'keyword' (que se resuelve en los campos title y body) pero la expresión es text_relevance(title)+text_relevance(author), el campo author no está en la cláusula de consulta y provoca el error. Compruebe que cada campo referenciado en la expresión de ordenamiento fino también aparezca en la cláusula de consulta.
Recomendaciones
Precalcule las puntuaciones estáticas fuera de línea. Las señales que no cambian por consulta —como las calificaciones del vendedor, la popularidad o la calidad del contenido— consumen muchos recursos si se calculan durante la consulta. Almacénelas en un campo general_score calculado fuera de línea y luego haga referencia a general_score en su expresión de ordenamiento. Esto reduce el procesamiento durante la búsqueda y mejora la latencia.
Utilice tag_match() para la coincidencia de funciones multidimensionales. La función tag_match() compara vectores de funciones entre la consulta y los documentos en varias dimensiones. Resulta especialmente útil para clasificar productos de comercio electrónico, donde se deben combinar señales como preferencias de usuario, atributos del producto y patrones históricos de clics.
Considere la relevancia como una combinación ponderada de señales. Ninguna señal captura por sí sola todos los aspectos de la calidad. Ajuste el peso de cada factor —coincidencia de texto, actualidad, popularidad, reglas de negocio— para lograr el comportamiento de clasificación que sus usuarios esperan.