Todos los productos
Search
Centro de documentos

OpenSearch:Cláusula distinct

Última actualización: Sep 05, 2026

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

  1. La cláusula distinct es opcional.

  2. Los campos usados en una cláusula distinct deben configurarse como campos de atributo en el esquema de la aplicación.

  3. No se admiten campos ARRAY. Solo se pueden usar campos INT y LITERAL.

  4. Solo se puede especificar un campo para la dispersión.

  5. 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

  1. 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
  2. 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