Tous les produits
Search
Centre de documentation

OpenSearch:Clause distinct

Dernière mise à jour :Aug 22, 2026

La clause distinct diversifie les résultats de recherche en limitant le nombre de documents partageant la même valeur de champ au sein d'un ensemble de résultats. Cela évite qu'une valeur dominante ne monopolise la page de résultats.

Cas d'utilisation courants :

  • Déduplication : renvoyez un seul résultat par titre, entreprise ou SKU de produit. Définissez dist_count:1 et dist_times:1 pour conserver exactement un document par valeur de champ.

  • Correction des déséquilibres : lorsqu'un vendeur ou un auteur domine vos premiers résultats, utilisez dist_count et dist_times pour limiter leur part et faire apparaître des documents associés à d'autres valeurs.

Syntaxe

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

Paramètres

Paramètre Type Obligatoire Valeur par défaut Description
dist_key string Oui — Champ utilisé pour disperser les résultats. Doit être un champ d'attribut de type INT ou LITERAL.
dist_count int Non 1 Nombre de documents à extraire par opération de dispersion.
dist_times int Non 1 Nombre d'opérations de dispersion à effectuer.
reserved true/false Non true Indique s'il faut conserver les documents non extraits. Définissez cette option sur false pour les supprimer.
update_total_hit true/false Non false S'applique uniquement lorsque reserved est défini sur false. Si la valeur est true, la valeur total_hit est ajustée en soustrayant le nombre de documents supprimés, mais elle peut rester imprécise. Si la valeur est false, total_hit inclut les documents supprimés.
dist_filter string Non — Condition de filtre qui exempte les documents correspondants de la dispersion. Les documents exemptés sont triés aux côtés du premier groupe de documents dispersés. Par défaut, tous les documents sont dispersés.
grade float Non — Un ou plusieurs seuils de score (séparés par `

`) qui divisent les documents en catégories avant la dispersion. Chaque catégorie est dispersée indépendamment en utilisant les mêmes valeurs pour dist_count et dist_times. Les catégories sont triées dans le même ordre que la première catégorie. Si ce paramètre est omis, tous les documents sont traités comme une seule catégorie.

Avertissement

Lorsque reserved est défini sur false, les valeurs de réponse total et viewtotal deviennent imprécises. Si votre application utilise ces valeurs pour la pagination ou l'affichage, consultez la section Plug-in distinct uniq.

Fonctionnement de dist_count et dist_times

Le paramètre dist_count contrôle le nombre de documents à extraire par opération. Le paramètre dist_times contrôle le nombre d'opérations à exécuter. Les documents extraits sont placés au début de l'ensemble de résultats, dans l'ordre de chaque opération.

Données de test :

Document id name
doc1 11 a
doc2 22 a
doc3 33 a
doc4 44 b
doc5 55 c
doc6 66 c

Exemple 1 — Extraire 2 documents par opération, 1 opération :

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

Résultat : doc1, doc2, doc4, doc5, doc6

Chaque valeur de name contribue jusqu'à 2 documents. name:a fournit doc1 et doc2 ; name:b fournit doc4 ; name:c fournit doc5 et doc6. doc3 (troisième document avec name:a) est supprimé.

Exemple 2 — Extraire 1 document par opération, 2 opérations :

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

Résultat : doc1, doc4, doc5, doc2, doc6

L'opération 1 prend le premier document de chaque valeur : doc1 (a), doc4 (b), doc5 (c). L'opération 2 prend le document suivant de chaque valeur : doc2 (a), doc6 (c). doc3 est supprimé.

Exemple 3 — Extraire 1 document par opération, 1 opération :

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

Résultat : doc1, doc4, doc5

Un seul document par valeur est conservé. Tous les autres documents sont supprimés.

Paramètre grade

Utilisez le paramètre grade pour classer les documents en catégories basées sur le score avant la dispersion. Chaque catégorie est dispersée indépendamment en utilisant les mêmes valeurs pour dist_count et dist_times. Les catégories sont triées dans le même ordre que la première catégorie.

Seuil unique — grade:3.0 crée deux catégories :

Catégorie Plage de scores
Première score < 3,0
Deuxième score >= 3,0

Deux seuils — grade:3.0|5.0 crée trois catégories :

Catégorie Plage de scores
Première score < 3,0
Deuxième 3,0 <= score < 5,0
Troisième score >= 5,0

Il n'y a aucune limite au nombre de seuils.

Notes d'utilisation

  • La clause distinct est facultative.

  • Les champs référencés dans dist_key doivent être configurés comme champs d'attribut dans le schéma de l'application.

  • Le paramètre dist_key prend uniquement en charge les types de champs INT et LITERAL. Les champs ARRAY ne sont pas pris en charge.

  • Spécifiez un seul champ par clause distinct.

  • La fonctionnalité de tri ne supprime pas les doublons. Pour dédupliquer selon un champ (par exemple, title), utilisez une clause distinct avec dist_count:1 et dist_times:1.

Plug-in distinct uniq

Lorsque reserved est défini sur false, les valeurs de réponse total et viewtotal sont imprécises. Le plug-in distinct uniq corrige ces valeurs lorsque dist_times, dist_count et reserved sont respectivement définis sur 1, 1 et false.

Pour activer le plug-in, ajoutez duniqfield:<field> à la clause kvpairs :

kvpairs=duniqfield:<field>

La valeur <field> doit correspondre à dist_key.

Limitations :

  • Fonctionne uniquement lorsque dist_times=1, dist_count=1 et reserved=false. La modification de l'une de ces valeurs désactive le plug-in.

  • Renvoie un maximum de 5 000 résultats par requête, même si davantage de résultats correspondent.

  • Peut entraîner un délai d'expiration sur les requêtes touchant des millions d'enregistrements.

Exemples

Diversifier les résultats par entreprise, en conservant tous les documents :

Recherchez des documents contenant « Zhejiang University » avec create_time > 1402301230, dispersez les résultats par company_id avec 10 opérations de 2 documents chacune. Les documents non extraits sont conservés et classés à la fin.

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

Dédupliquer par entreprise avec un comptage précis des résultats :

Recherchez des documents contenant « Zhejiang University », conservez un seul document par company_id et utilisez le plug-in distinct uniq pour obtenir des valeurs précises pour total et viewtotal.

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