Tous les produits
Search
Centre de documentation

OpenSearch:Clause distinct

Dernière mise à jour :Aug 10, 2026

La clause distinct diversifie les résultats de recherche en limitant le nombre de documents issus d'une même source affichés conjointement. Sans cette clause, les documents très bien notés provenant d'un seul utilisateur peuvent dominer l'intégralité d'une page de résultats.

Syntaxe

dist_key:field,dist_count:1,dist_times:1,reserved:false.

Paramètre

Type

Obligatoire

Valeur valide

Valeur par défaut

Description

dist_key

string

Oui

Champ utilisé pour la dispersion.

dist_times

int

Non

1

Nombre d'extractions.

dist_count

int

Non

1

Documents extraits par cycle.

reserved

true/false

Non

true/false

true

Indique s'il faut conserver les documents restants après l'extraction. Si ce paramètre est défini sur false, les documents restants sont ignorés et le nombre total de correspondances devient imprécis.

update_total_hit

true/false

Non

true/false

false

Lorsque reserved est défini sur false et update_total_hit sur true, le système soustrait les documents ignorés de total_hit. Le résultat peut être imprécis. Lorsque ce paramètre est défini sur false, total_hit inclut les documents ignorés.

dist_filter

string

Non

Condition de filtrage. Les documents filtrés ignorent la dispersion et sont triés avec le premier groupe de résultats dispersés. Par défaut, tous les documents sont dispersés.

grade

float

Non

Seuils de score classant les documents en catégories avant la dispersion. Séparez plusieurs seuils par des barres verticales (|). Si ce paramètre est omis, tous les documents appartiennent à une seule catégorie. Exemple : grade:3.0 divise les documents en deux catégories (scores inférieurs à 3,0 et scores supérieurs ou égaux à 3,0). grade:3.0|5.0 crée trois catégories. Les catégories suivent le même ordre de tri que la première catégorie.

Exemples dist_count et dist_times

Les exemples suivants utilisent six documents où id est la clé primaire et name est le champ à disperser.

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

Exemple 1 : distinct=dist_key:name,dist_count:2,dist_times:1,reserved:false. Un cycle extrait deux documents par groupe. Résultat : doc1, doc2, doc4, doc5 et doc6.

Exemple 2 : distinct=dist_key:name,dist_count:1,dist_times:2,reserved:false. Deux cycles extraient un document par groupe chacun. Résultat : doc1, doc4, doc5, doc2 et doc6.

Exemple 3 : distinct=dist_key:name,dist_count:1,dist_times:1,reserved:false. Un cycle extrait un document par groupe. Résultat : doc1, doc4 et doc5.

Notes d'utilisation

  1. La clause distinct est facultative.

  2. Les champs utilisés dans une clause distinct doivent être configurés comme champs d'attribut dans le schéma de l'application.

  3. Les champs ARRAY ne sont pas pris en charge. Seuls les champs INT et LITERAL peuvent être utilisés.

  4. Un seul champ peut être spécifié pour la dispersion.

  5. Le tri ne supprime pas les doublons. Pour dédupliquer les résultats, utilisez une clause distinct avec le champ cible (tel que title) et définissez dist_count:1, dist_times:1.

Plug-in distinct uniq

Lorsque reserved est défini sur false, les valeurs total et viewtotal deviennent imprécises, ce qui peut entraîner des erreurs de pagination. Le plug-in distinct uniq corrige ce problème lorsque dist_times, dist_count et reserved sont respectivement définis sur 1, 1 et false. Ajoutez duniqfield:field à la clause kvpairs. Exemple : kvpairs=duniqfield:name.

Remarques

  • La valeur du champ doit correspondre à la valeur dist_key dans la clause distinct.

  • Le plug-in fonctionne uniquement lorsque dist_times, dist_count et reserved sont respectivement définis sur 1, 1 et false.

  • Pour des raisons de performance, le plug-in renvoie au maximum 5 000 résultats par requête.

  • Les requêtes correspondant à des millions d'enregistrements peuvent expirer.

Exemples

  1. Recherchez des documents contenant « Zhejiang University » dont create_time est supérieur à 1402301230. Dispersez les résultats par company_id avec 10 cycles de 2 documents chacun. Les documents extraits sont classés à la fin.

    query=default:'Zhejiang University'&&filter=create_time>1402301230&&distinct=dist_key:company_id,dist_count:2,dist_times:10
  2. Recherchez des documents contenant « Zhejiang University ». Dispersez les résultats par company_id avec un cycle d'un seul document. Ignorez les documents restants et renvoyez uniquement ceux qui ont été extraits.

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