Comment gérer les “échange” avec Solr?
J'ai un site de petites annonces...
J'ai Solr faire la recherche des petites annonces, et puis revenir ID:snir que j'utilise ensuite pour mettre dans un tableau. Puis-je utiliser ce tableau pour trouver toutes les petites annonces dans une db MySql où l'identification:le match de l'ID:s dans le tableau retourné par Solr.
Maintenant, parce que ce tableau peut être très très grand (100thousand enregistrements ou plus) alors j'aurais besoin de "page" les résultats de sorte que peut-être 100, retourné à un moment. Et ensuite utiliser ces 100 ID:s dans MySql pour trouver des petites annonces.
Donc, est-il possible de page avec SOLR?
Et si oui, comment? J'ai besoin d'un exemple de code... Et que les résultats seraient s'il vous plaît.
J'ai surtout besoin d'une profonde exemple!
Grâce
OriginalL'auteur | 2010-02-27
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à IBM. Peut-être que vous êtes sur la bonne voie.
Donc, vous voulez probablement une certaine variation sur
Votre solr le client doit fournir un moyen d'obtenir le nombre total de résultats sans trop de difficulté.
OriginalL'auteur jasonbar
La pagination est géré avec le démarrer et les lignes paramètres, par exemple:
vous donnera 10 documents, en commençant par le document 20.
Sur l'obtention d'autres informations à partir de MySQL, vous êtes sur votre propre. Moi et d'autres personnes déjà suggéré de vous pour stocker le tout dans Solr pour éviter les requêtes supplémentaires à MySQL.
pourquoi supposez-vous qu'il a besoin accès transactionnel? Solr peut très bien fonctionner comme une première banque de données pour de nombreuses applications, lorsqu'il est utilisé correctement. Comme d'habitude, utilisez le bon outil pour le travail.
+1 merci, cela m'a aidé, aussi.
Nous avons essayé d'aller sur le chemin de stockage/récupération de tout, de solr. Toutefois, en cas de forte pagination exemple comme ceci, solr commence à retourner les résultats ou, parfois, ne pas tout reprendre. Ainsi, un tri paramètre est nécessaire. Cependant, dès que nous ajoutons de tri paramètre que nous commencer à courir dans le tas des problèmes d'espace (pour une raison de tri 75k documents (<1k chaque) 1 GO n'est pas suffisant). Je suis conscient du curseur solution souligné par 'Yonik" et je suis avec impatience d'attente pour sa libération. Pourriez-vous s'il vous plaît commentaire sur cette situation? Nous sommes à l'aide de solr 4.0.
cursorMark sera disponible dans Solr 4.7 issues.apache.org/jira/browse/SOLR-5463 version stable Actuelle est 4.6.1 donc je suppose qu'il sera publié dans les prochains mois.
OriginalL'auteur Mauricio Scheffer
Probablement un peu vieille question et beaucoup de réponses utiles et des recommandations, mais je vais essayer de résumer les résultats et de décrire la solution pour la pagination de grands ensembles de données à l'aide de curseur, bec. J'ai fait face à ce problème récemment.
Comme mentionné par Yonik le problème de l'habitude
start
/rows
est que lorsque nous avons le grand jeu de données etstart
est un peu plus loin (beaucoup plus encore) de zéro, nous avons de belles généraux en termes d'efficacité et de mémoire. C'est parce que l'extraction de 20 documents à partir du "milieu" de 500K dossiers + à l'aide de tri, au moins exige le tri de toutes les données (de tri interne unique de la). En outre, si la recherche est distribué, il sera encore plus coûteuse en termes de ressources, bec. dataset (de 500 020 lignes) de chaque fragment doit être retourné à l'agrégateur de nœud à être fusionnées, à savoir applicables à 20 lignes.La solution ici est d'utiliser Solr
cursorMark
.Sur la première requête de vous annoncer que le
&cursorMark=*
. Cela signifie suivante:! Une "mise en garde" ici, c'est que votre
sort
clauses doit inclure le uniqueKey champ. Il peut êtreid
champ si son unique.Une partie de la première requête devrait ressembler à ceci:
Que le résultat vous recevrez structure suivante
Pour récupérer la page suivante, la requête suivante va chercher la prochaine:
Avis de la
cursorMark
de réponse précédente. Et que le résultat que vous obtiendrez la page suivante de résultats (même structure que la première réponse, mais avec un autrenextCursorMarker
valeur). Et ainsi de suite ...Cette approche s'adapte idéalement à l'infini défilement de la pagination, mais pour l'utiliser dans la pagination classique il y a quelques choses à penser :).
Voici quelques documents de référence, j'ai trouvé la résolution de ce problème, j'espère que ça aidera quelqu'un pour le faire.
La pagination à l'aide du curseur est un peu spécial. La raison est que nous ne pouvons pas sauter à l'avance, par exemple la page 10/55 bec. nous n'avons pas de pointeur vers cette plage si régulières pagination suppose que l'on peut passer à n'importe quelle page à tout moment. Alors que les curseur nécessite pointeur précédent pour obtenir la prochaine et applicables pour les cas aka infini défilement. Aussi, je ne sais pas si cette commentaire de Prashant Saraswat est toujours d'actualité, mais bon à savoir.
OriginalL'auteur Paul T. Rawkeen
Le "start" paramètre contrôle le décalage dans les résultats de recherche, et les "lignes" paramètre contrôle le nombre de documents à retourner à partir de là.
Si vous faites de la "profonde d'échange" (une itération sur plusieurs pages), alors vous pouvez obtenir une bien meilleure performance à l'aide d'un curseur pour effectuer une itération sur l'ensemble des résultats.
OriginalL'auteur Yonik
Je pense qu'il vaut la peine de dire que solr retourne ensemble avec le courant de la page de résultats d'un comptage du nombre total d'enregistrements trouvés.
Par exemple d'appel:
La réponse est:
À l'aide de solrj, la méthode de requête renvoie une SolrDocumentList qui a de la méthode:
getNumFound().
OriginalL'auteur Marco Altieri