La cláusula distinct diversifica los resultados de búsqueda al limitar la cantidad de documentos del mismo origen que aparecen juntos. Sin esta cláusula, los documentos con puntuaciones altas de un solo usuario pueden dominar toda una página de resultados.
Sintaxis
dist_key:field,dist_count:1,dist_times:1,reserved:false.
|
Parámetro |
Tipo |
Obligatorio |
Valor válido |
Valor predeterminado |
Descripción |
||
|
dist_key |
string |
Sí |
Campo que se usará para la dispersión. |
||||
|
dist_times |
int |
No |
1 |
Número de rondas de extracción. |
|||
|
dist_count |
int |
No |
1 |
Documentos extraídos por ronda. |
|||
|
reserved |
true/false |
No |
true/false |
true |
Indica si se conservan los documentos restantes después de la extracción. Si se establece en false, se descartan los documentos restantes y el recuento total de coincidencias pierde precisión. |
||
|
update_total_hit |
true/false |
No |
true/false |
false |
Cuando reserved es false y update_total_hit es true, el sistema resta los documentos descartados de total_hit. Es posible que el resultado no sea preciso. Si se establece en false, total_hit incluye los documentos descartados. |
||
|
dist_filter |
string |
No |
Condición de filtro. Los documentos filtrados omiten la dispersión y se ordenan junto con el primer grupo de resultados dispersos. De forma predeterminada, todos los documentos se someten a dispersión. |
||||
|
grade |
float |
No |
Umbrales de puntuación que clasifican los documentos en categorías antes de la dispersión. Separe varios umbrales con barras verticales ( |
). Si se omite, todos los documentos pertenecen a una sola categoría. Ejemplo: grade:3.0 divide los documentos en dos categorías (puntuaciones menores a 3.0 y puntuaciones iguales o superiores a 3.0). grade:3.0 |
5.0 crea tres categorías. Las categorías siguen el mismo orden de clasificación que la primera categoría. |
Ejemplos de dist_count y dist_times
A continuación se presentan ejemplos con seis documentos donde id es la clave principal y name es el campo de dispersió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
Ejemplo 1: distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false. En una ronda se extraen dos documentos por grupo. Resultado: doc1, doc2, doc4, doc5 y doc6.
Ejemplo 2: distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false. En dos rondas se extrae un documento por grupo en cada una. Resultado: doc1, doc4, doc5, doc2 y doc6.
Ejemplo 3: distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false. En una ronda se extrae un documento por grupo. Resultado: doc1, doc4 y doc5.
Notas de uso
La cláusula distinct es opcional.
Los campos usados en una cláusula distinct deben configurarse como campos de atributo en el esquema de la aplicación.
No se admiten campos ARRAY. Solo se pueden usar campos INT y LITERAL.
Solo se puede especificar un campo para la dispersión.
La ordenación no elimina duplicados. Para deduplicar, utilice una cláusula distinct con el campo objetivo (como title) y establezca dist_count:1, dist_times:1.
Complemento distinct uniq
Cuando reserved se establece en false, los valores total y viewtotal pierden precisión, lo que puede provocar errores de paginación. El complemento distinct uniq corrige este problema cuando dist_times, dist_count y reserved se configuran en 1, 1 y false, respectivamente. Agregue duniqfield:field a la cláusula kvpairs. Ejemplo: kvpairs=duniqfield:name.
Notas
El valor del campo debe coincidir con el valor de dist_key en la cláusula distinct.
El complemento funciona únicamente cuando dist_times, dist_count y reserved se establecen en 1, 1 y false.
Por motivos de rendimiento, el complemento devuelve un máximo de 5,000 resultados por consulta.
Las consultas que coinciden con millones de registros pueden agotar el tiempo de espera.
Ejemplos
-
Busque documentos que contengan "Zhejiang University" donde create_time sea mayor que 1402301230. Disperse los resultados por company_id con 10 rondas de 2 documentos cada una. Los documentos extraídos se clasifican al final.
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". Disperse por company_id con una ronda de un documento. Descarte los documentos restantes y devuelva solo los extraídos.
query=default:'Zhejiang University'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id