Todos los productos
Search
Centro de documentos

OpenSearch:Cláusula distinct

Última actualización: Sep 04, 2026

La cláusula distinct diversifica los resultados de búsqueda al limitar la cantidad de documentos con el mismo valor de campo que aparecen en un conjunto de resultados. Esto evita que un valor dominante monopolice la página de resultados.

Casos de uso comunes:

  • Deduplicación: Devuelve solo un resultado por título, empresa o SKU de producto. Establezca dist_count:1 y dist_times:1 para conservar exactamente un documento por valor de campo.

  • Corrección de sesgo: Cuando un vendedor o autor domina los primeros resultados, utilice dist_count y dist_times para limitar su proporción y mostrar documentos de otros valores.

Sintaxis

distinct=dist_key:<field>,dist_count:<n>,dist_times:<n>,reserved:<true|false>

Parámetros

Parámetro

Tipo

Obligatorio

Predeterminado

Descripción

dist_key

string

Sí

—

El campo por el cual se dispersan los resultados. Debe ser un campo de atributo de tipo INT o LITERAL.

dist_count

int

No

1

Número de documentos que se extraen por cada operación de dispersión.

dist_times

int

No

1

Número de operaciones de dispersión que se ejecutan.

reserved

true/false

No

true

Indica si se conservan los documentos no extraídos. Establézcalo en false para descartarlos.

update_total_hit

true/false

No

false

Se aplica únicamente cuando reserved es false. Cuando es true, el valor de total_hit se ajusta al restar la cantidad de documentos descartados, aunque puede seguir siendo inexacto. Cuando es false, total_hit incluye los documentos descartados.

dist_filter

string

No

—

Condición de filtro que exime a los documentos coincidentes de la dispersión. Los documentos eximidos se ordenan junto con el primer grupo de documentos dispersados. De forma predeterminada, todos los documentos se dispersan.

grade

float

No

—

Uno o más umbrales de puntuación (separados por `

`) que dividen los documentos en categorías antes de la dispersión. Cada categoría se dispersa de forma independiente con los mismos valores de dist_count y dist_times. Las categorías se ordenan siguiendo el mismo orden que la primera categoría. Si se omite, todos los documentos se tratan como una sola categoría.

Aviso

Cuando reserved se establece en false, los valores de respuesta total y viewtotal resultan inexactos. Si su aplicación utiliza estos valores para la paginación o visualización, consulte el complemento distinct uniq.

Funcionamiento de dist_count y dist_times

dist_count controla cuántos documentos se extraen por operación. dist_times controla cuántas operaciones se ejecutan. Los documentos extraídos se colocan al inicio del conjunto de resultados, según el orden de cada operación.

Datos de prueba:

Documento

id

name

doc1

11

a

doc2

22

a

doc3

33

a

doc4

44

b

doc5

55

c

doc6

66

c

Ejemplo 1 — Extraer 2 documentos por operación, 1 operación:

distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false

Resultado: doc1, doc2, doc4, doc5, doc6

Cada valor de name aporta hasta 2 documentos. name:a aporta doc1 y doc2; name:b aporta doc4; name:c aporta doc5 y doc6. doc3 (el tercer documento con name:a) se descarta.

Ejemplo 2 — Extraer 1 documento por operación, 2 operaciones:

distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false

Resultado: doc1, doc4, doc5, doc2, doc6

La operación 1 toma el primer documento de cada valor: doc1 (a), doc4 (b), doc5 (c). La operación 2 toma el siguiente documento de cada valor: doc2 (a), doc6 (c). doc3 se descarta.

Ejemplo 3 — Extraer 1 documento por operación, 1 operación:

distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false

Resultado: doc1, doc4, doc5

Se conserva un documento por valor. Todos los documentos restantes se descartan.

Parámetro grade

Utilice grade para clasificar los documentos en categorías basadas en puntuación antes de la dispersión. Cada categoría se dispersa de forma independiente con los mismos valores de dist_count y dist_times. Las categorías se ordenan siguiendo el mismo orden que la primera categoría.

Umbral único — grade:3.0 crea dos categorías:

Categoría

Rango de puntuación

Primera

score < 3.0

Segunda

score >= 3.0

Dos umbrales — grade:3.0|5.0 crea tres categorías:

Categoría

Rango de puntuación

Primera

score < 3.0

Segunda

3.0 <= score < 5.0

Tercera

score >= 5.0

No hay límite en la cantidad de umbrales.

Notas de uso

  • La cláusula distinct es opcional.

  • Los campos referenciados en dist_key deben configurarse como campos de atributo en el esquema de la aplicación.

  • dist_key solo admite tipos de campo INT y LITERAL. Los campos ARRAY no son compatibles.

  • Especifique solo un campo por cláusula distinct.

  • La función de ordenamiento no elimina duplicados. Para deduplicar por un campo (por ejemplo, title), utilice una cláusula distinct con dist_count:1 y dist_times:1.

Complemento distinct uniq

Cuando reserved es false, los valores de respuesta total y viewtotal son inexactos. El complemento distinct uniq corrige estos valores cuando dist_times, dist_count y reserved se establecen en 1, 1 y false, respectivamente.

Para habilitar el complemento, agregue duniqfield:<field> al kvpairs clause:

kvpairs=duniqfield:<field>

El valor de <field> debe coincidir con dist_key.

Limitaciones:

  • Funciona únicamente cuando dist_times=1, dist_count=1 y reserved=false. Cambiar cualquiera de estos valores deshabilita el complemento.

  • Devuelve un máximo de 5,000 resultados por consulta, incluso si hay más coincidencias.

  • Puede agotar el tiempo de espera en consultas que acceden a millones de registros.

Ejemplos

Diversificar resultados por empresa y conservar todos los documentos:

Busque documentos que contengan "Zhejiang University" con create_time > 1402301230, dispérselos por company_id mediante 10 operaciones de 2 documentos cada una. Los documentos no extraídos se conservan y se clasifican al final.

query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10

Deduplicar por empresa con un recuento de resultados preciso:

Busque documentos que contengan "Zhejiang University", conserve solo un documento por company_id y utilice el complemento distinct uniq para obtener valores precisos de total y viewtotal.

query=default:'Zhejiang University'&&distinct=dist_key:company_id,dist_count:1,dist_times:1,reserved:false&&kvpairs=duniqfield:company_id