9
votes

SOLR - Comment compter les comptes de facettes limité aux lignes retournées dans ResultSet

/ SELECT /? Q = *: * & ROWS = 100 & Facet = On & Facet.field = Catégorie

J'ai environ 100 000 documents indexés. Mais je ne retourne que 100 documents à l'aide de lignes = 100. Le nombre de facettes est retourné pour la catégorie, cependant renvoyer les comptes pour tous les documents indexés.

Pouvons-nous en quelque sorte limiter les facettes à l'ensemble de résultats renvoyés? I.E 100 rangées seulement?


4 Réponses :


2
votes

Désolé, mais je ne pense pas que ce soit possible. Les facettes sont toujours basées sur tous les documents correspondant à la requête.


1 commentaires

Je pense que c'est la réponse à ma requête et il est en effet très malheureux que cette fonctionnalité n'ait pas encore été mise en œuvre dans Solr. Les hacks énoncés dans l'autre question liée ci-dessus ne sont également pas vraiment dignes, sur un serveur de production avec d'énormes données. J'apprécierais si les créateurs de SOLR peuvent mettre en œuvre cette fonctionnalité dans un proche avenir



0
votes

Pas une vraie réponse, mais peut-être mieux que rien: la fonctionnalité de regroupement des résultats (départ du coffre!):

http://wiki.apache.org/solr/fieldCollaping

Où facet.field = la catégorie est similaire à la catégorie Group.field = et vous n'obtiendrez que autant de groupes («Hits facettes») que vous avez spécifié!


0 commentaires

0
votes

Si vous exécutez toujours la même requête (q = *: *) , vous pouvez peut-être utiliser facet.limit, par exemple: xxx

Dites-nous si L'ordre que Solr utilise est la même chose dans la facette que dans la requête : .


2 commentaires

Pour répondre à votre question en premier - oui, la commande est la même dans la facette que dans la requête. Cependant, ici, nous ne pouvons pas utiliser facet.limit comme facette.limit ne limite que le nombre de facettes à revenir. Cela ne limite pas les Resultset. Alors, sélectionnez /? Q = *: * & Rows = 100 & Facet = On & Facet.field = Catégorie & Facet.L Imit = 100 ne renvoie que 100 valeurs de catégorie. Il ne limitera pas les Resultats à 100, de même que l'exigence ici.


Down voté comme facette.limit ne limite que le nombre de facettes retournées, pas les lignes non agiées, comme le souligne le commentaire ci-dessus



6
votes

Je ne pense pas que cela soit possible de manière directe, comme l'a souligné Pascal.

Je peux voir deux façons d'y parvenir:

  1. Méthode I: Faites le comptage de vous-même visiter les 100 résultats renvoyés. Ceci est très facile et rapide s'ils sont des champs catégoriques, mais plus difficiles s'ils sont des champs de texte qui doivent être tokenized, etc.

  2. Méthode II: Faites deux passes:

    1. Faites une requête normale sans facettes (il vous suffit de demander des identifiants DOC à ce stade)
    2. Ramassez tous les identifiants des documents retournés
    3. Faites une deuxième requête pour tous les champs et facettes, ajout d'un filtre à restreindre le résultat de ces identifiants collectés dans SETP 2. Quelque chose comme:

      Sélectionnez /? q = : & facet = on & facet.field = Catégorie & FQ = ID: (312 Ou 28 ou 1231 ...)

      Le premier est bien plus efficace et je recommanderais pour les gorgées non textuelles. La seconde est calculée en calcul mais a l'avantage de travailler pour tous les types de champs OD.


0 commentaires