La cláusula distinct diversifica los resultados de búsqueda al limitar cuántos documentos con el mismo valor de campo aparecen juntos. Este tema aborda la sintaxis de la cláusula, los parámetros dist_count y dist_times, y el plugin distinct uniq.
Descripción general de la función
La cláusula distinct mejora la diversidad de los resultados. Cuando varios documentos del mismo usuario obtienen puntuaciones altas, pueden dominar los primeros resultados y llenar la página con contenido de una sola fuente. La cláusula distinct soluciona esto mediante el muestreo de documentos de cada usuario, lo que permite que aparezcan documentos de una gama más amplia de usuarios.
Sintaxis
La sintaxis de la cláusula distinct es: dist_key:field,dist_count:1,dist_times:1,reserved:false
|
Parámetro |
Tipo |
Obligatorio |
Valores válidos |
Valor predeterminado |
Descripción |
||
|
dist_key |
string |
Sí |
Campo utilizado para la diversificación. |
||||
|
dist_times |
int |
No |
1 |
Número de rondas de muestreo. |
|||
|
dist_count |
int |
No |
1 |
Número de documentos que se muestrean en cada ronda. |
|||
|
reserved |
true/false |
No |
true/false |
true |
Indica si se conservan los documentos restantes después del muestreo. Si se establece en false, los documentos restantes se descartan, lo que provoca que el recuento |
||
|
update_total_hit |
true/false |
No |
true/false |
false |
Cuando |
||
|
dist_filter |
string |
No |
Condición de filtro. Los documentos filtrados no participan en la operación |
||||
|
grade |
float |
No |
Especifica umbrales para dividir los documentos en grados. La operación |
) para separar varios umbrales. No hay límite en la cantidad de grados. Por ejemplo: 1. |
5.0`: Divide los documentos en tres grados. El primer grado corresponde a puntuaciones menores a 3.0. El segundo grado abarca puntuaciones desde 3.0 hasta 5.0. El tercer grado incluye puntuaciones de 5.0 o superiores. El orden de los grados sigue el orden de clasificación del criterio de primera dimensión. Por ejemplo, si el orden es descendente, los grados también se ordenan de mayor a menor. |
Explicación de dist_count y dist_times
A continuación, se presentan ejemplos que ilustran el funcionamiento de dist_count y dist_times. Suponga que tiene seis documentos donde id es la clave principal y name es el campo de diversificación:
doc1: id:11 name:a
doc2: id:22 name:a
doc3: id:33 name:a
doc4: id:44 name:b
doc5: id:55 name:c
doc6: id:66 name:c
Caso 1: La configuración distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false especifica una ronda de muestreo y dos documentos por ronda. El resultado diversificado es: doc1, doc2, doc4, doc5 y doc6.
Caso 2: La configuración distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false especifica dos rondas de muestreo y un documento por ronda. El resultado diversificado es: doc1, doc4, doc5, doc2 y doc6.
Caso 3: La configuración distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false especifica una ronda de muestreo y un documento por ronda. El resultado diversificado es: doc1, doc4 y doc5.
Notas
La cláusula
distinctes opcional.Los campos utilizados en la cláusula
distinctdeben configurarse como campos de propiedad en el esquema de la aplicación.Solo se admiten los tipos de campo int y literal. Los tipos de matriz no son compatibles.
No se pueden especificar varios parámetros
dist_key.El ordenamiento no elimina duplicados automáticamente. Sin embargo, puede usar la cláusula
distinctpara deduplicar resultados. Por ejemplo, para eliminar artículos duplicados que tienen el mismo título, establezcadist_keyentitle,dist_timesen1ydist_counten1.
El plugin distinct uniq
Cuando reserved es false, los valores total y viewtotal pueden volverse inexactos, lo que causa problemas en la paginación u otras operaciones. El plugin distinct uniq corrige estos valores cuando dist_times es 1, dist_count es 1 y reserved es false. Para usar el plugin, agregue duniqfield:field a la cláusula kvpair. Para obtener más información, consulte the kvpair clause. Por ejemplo: kvpairs=duniqfield:name
Nota:
fielddebe ser igual aldist_keyde la cláusuladistinct.El plugin solo es efectivo para consultas donde
dist_timeses1,dist_countes1yreservedesfalse.Por motivos de rendimiento, el plugin devuelve un valor
totalmáximo de 5,000. Si la cantidad real de resultados de búsqueda supera los 5,000, el valortotalse devuelve como 5,000 de todas formas.Este límite de 5,000 para el valor
totalaplica únicamente cuando se usa el plugindistinct uniq. Si no se utiliza el plugin, el valortotalno tiene un tope de 5,000.Si usa este plugin y la consulta abarca un gran volumen de datos, como millones de registros, la consulta podría agotar el tiempo de espera.
Ejemplos
-
Busque documentos que contengan "Zhejiang University" y se hayan creado después de la marca de tiempo 1402301230. Diversifique los resultados según el campo
company_id. Realice 10 rondas de muestreo y tome 2 resultados por ronda.query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10 -
Busque documentos que contengan "Zhejiang University". Use el campo
company_idpara deduplicar los resultados y conserve solo un documento por empresa. Descarte los documentos restantes y actualice el recuento total de coincidencias.query=default:'Zhejiang University'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id