2017-08-23 2 views
0

Est-il possible de récupérer dynamiquement tous les champs présents dans un ensemble de documents Solr tout en conservant des performances raisonnables? L'objectif final ici est de remplir dynamiquement une liste de champs numériques pour que les utilisateurs puissent trier leur requête actuelle.Récupérer dynamiquement tous les champs présents dans les documents Solr

Dans un monde parfait, j'aimerais que cette liste contienne tous les champs numériques présents dans les documents retournés par la requête de l'utilisateur.

Si cela n'est pas possible, cependant, je vais remplir la liste avec des champs numériques via le gestionnaire de luke. Malheureusement, il semble que le gestionnaire luke renvoie des champs pour l'intégralité de la collection, mais ne peut pas être limité uniquement à la requête en cours. Je suis assez nouveau à Solr, donc toute aide/discussion serait grandement appréciée!

Répondre

0

Voilà comment je résolu mon problème:

  1. Ajouter de nouveaux champs schéma: SORT_DOC_FIELDS et NO_SORT_DOC_FIELDS.
  2. A écrit du code JavaScript en utilisant le ScriptUpdateProcessor qui déterminait si un champ pouvait être trié sur la base de plusieurs critères (par exemple, non multi-valué, pas de type tdate ou string). S'il pouvait être trié, je l'ai ajouté au champ SORT_DOC_FIELDS pour ce document; sinon, je l'ai ajouté au champ NO_SORT_DOC_FIELDS. Lorsque je veux récupérer les champs présents dans une requête, j'ajoute &facet=true&facet.field=SORT_DOC_FIELDS&facet.field=NO_SORT_DOC_FIELDS&facet.limit=-1 à la chaîne de requête.

La performance est OK. J'ai un index de 30 millions de documents, et faire la requête et obtenir une réponse, aller-retour, prend environ 2s.