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:1etdist_times:1pour 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_countetdist_timespour 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 |
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_keydoivent être configurés comme champs d'attribut dans le schéma de l'application.Le paramètre
dist_keyprend 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 avecdist_count:1etdist_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=1etreserved=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