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
La clause
distinctest facultative.Les champs utilisés dans une clause
distinctdoivent être configurés comme champs d'attribut dans le schéma de l'application.Les champs ARRAY ne sont pas pris en charge. Seuls les champs INT et LITERAL peuvent être utilisés.
Un seul champ peut être spécifié pour la dispersion.
Le tri ne supprime pas les doublons. Pour dédupliquer les résultats, utilisez une clause
distinctavec 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
-
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 -
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