Wie bekomme ich alle Ergebnisse von der Solr-Abfrage?
Ich ausgeführt eine Anfrage wie "Adresse:Jack*". Es zeigen numFound = 5214 und Anzeige 100 Dokumente in der Ergebnisseite(ich verändert Standard-Anzeige von Ergebnissen von 10 bis 100). Wie bekomme ich alle Dokumente.
Vielen Dank im Voraus...
InformationsquelleAutor der Frage SENTHIL SARAVANAN | 2012-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich erinnere mich dabei &rows=2147483647
2,147,483,647 ist integer ist der maximale Wert. Ich erinnere mich an eine Zahl größer als, die einmal und eine NumberFormatException denn es konnte nicht analysiert werden, in einer int. Ich weiß nicht, ob Sie Lange heute, aber 2 Milliarden Zeilen in der Regel mehr als genug.
Kleine Anmerkung:
Seien Sie vorsichtig, wenn Sie planen, dies zu tun in der Produktion. Wenn Sie eine Abfrage wie * : * und Ihr index ist groß, Sie könnten die übertragung von ein paar Gigabyte in der Abfrage.
Wenn Sie wissen, dass Sie nicht viele docs, gehen Sie vor und verwenden Sie integer ' max-Wert.
Auf der anderen Seite,, wenn Sie tun, ein one-time-Skript und müssen nur dump alle Ergebnisse (zum Beispiel Dokument-ID ' s) dann ist dieser Ansatz gültig ist, wenn Sie nichts dagegen haben, wartet 3-5 Minuten für eine Abfrage zurück.
InformationsquelleAutor der Antwort Fermin Silva
Rückkehr aller Ergebnisse ist nie eine gute option, als wäre Es sehr langsam in der performance.
Können Sie erwähnen in Ihrem Anwendungsfall ?
Auch, Solr Zeilen parameter können Sie die Feineinstellung der Anzahl der Ergebnisse, die zurückgegeben werden.
Aber ich glaube nicht, dass es einen Weg gibt, Sie zu tune Zeilen alle Ergebnisse zurückgegeben werden. Es dauert gar nicht -1 als Wert.
So müssen Sie einen hohen Wert für alle Ergebnisse zurückgegeben werden.
InformationsquelleAutor der Antwort Jayendra
Ich würde vorschlagen, wie Deep-Paging.
Einfache Paginierung ist eine einfache Sache, wenn Sie einige Dokumente zu Lesen und alles, was Sie tun müssen, ist spielen mit
start
undrows
Parameter. Aber im Falle Sie haben viele Dokumente, ich meine Hunderte von tausenden oder gar Millionen ist dies nicht ein gangbarer Weg.Dies ist die Art von Sache, die bringen könnte Ihr Solr-server in die Knie.
Dies bedeutet, dass, wenn Sie eine website haben und paging-Suche Ergebnisse, die ein echter Nutzer gehen nicht so weiter, sondern betrachten Sie auf der anderen Seite, was passieren kann, wenn eine Spinne oder einem Spachtel versuchen, Lesen Sie alle Seiten der website.
Jetzt sprechen wir von Deep Paging.
Werde ich empfehlen, Lesen Sie diese erstaunliche post:
https://lucidworks.com/blog/2013/12/12/coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets/
Und werfen Sie einen Blick auf dieses Dokument Seite:
https://cwiki.apache.org/confluence/display/solr/Pagination++Ergebnisse
Und hier ist ein Beispiel, die versuchen zu erklären, wie Sie den Umbruch mit Hilfe der Cursor.
InformationsquelleAutor der Antwort freedev
Was Sie tun sollten, ist, erstellen Sie zuerst eine SolrQuery unten gezeigt und setzen Sie die Anzahl der Dokumente, die Sie wollen zu Holen in einem batch.
Hier bin ich erwägen, ein Beispiel Suche nach id, können Sie ersetzen Sie es mit einem Ihrer parameter, um die Suche auf.
"LastResult" ist die variable, die Sie ändern können, nach Ausführung der ersten 500 Datensätze(500 ist die batch-Größe) und legen Sie es auf die Letzte id habe aus den Ergebnissen.
Dies wird Ihnen helfen, führen Sie den nächsten Stapel, beginnend mit dem letzten Ergebnis vom vorherigen Stapel.
Hoffe, das hilft. Schießen Sie einen Kommentar unten, wenn Sie Erläuterungen benötigen.
InformationsquelleAutor der Antwort Apurv Nerlekar
Zur Auswahl aller Dokumente in dismax/edismax über Solarium php-client, der normale query-syntax : funktioniert nicht. Wählen Sie alle Dokumente festlegen der Standard-Abfrage-Wert im solarium-Abfrage auf eine leere Zeichenfolge. Dies ist erforderlich, da die Standard-Abfrage im Solarium ist :. Auch die alternative Abfrage :. Dismax/eDismax normalen query-syntax unterstützt keine :aber die alternative-query-syntax unterstützt.
Für mehr details Buch bezeichnet werden kann
http://www.packtpub.com/apache-solr-php-integration/book
InformationsquelleAutor der Antwort jayant
Als die anderen Antworten hingewiesen, Sie können konfigurieren, dass die Zeilen max integer Ausbeute wieder alle Ergebnisse für eine Abfrage.
Ich würde empfehlen, obwohl die Verwendung Solr-Funktion für die Paginierung, und bauen Sie eine Funktion, die Rücksendung für Sie alle Ergebnisse mit der cursorMark API. Der Kern von ihm ist, legen Sie die cursorMark parameter auf ' * ' setzen Sie die Größe der Seite(Zeilen-parameter), und auf jedes Ergebnis erhalten Sie eine cursorMark für die nächste Seite, so dass Sie die gleiche Abfrage ausführen, die nur mit der cursorMark von der letzten Folge. Auf diese Weise haben Sie mehr Flexibilität, wie viel die Ergebnisse, die Sie wollen zurück, in einem viel schneller Weg.
InformationsquelleAutor der Antwort itayad
Die Art, wie ich mit dem problem befasst ist, durch ausführen der Abfrage zweimal:
Macht es zweimal rufen, Solr, aber bekommt man alle passenden Datensätze....mit kleinen Leistungseinbußen.
InformationsquelleAutor der Antwort Ya.Ma
Abfrage.setRows(ganze Zahl.MAX_VALUE);
funktioniert für mich!!
InformationsquelleAutor der Antwort atpatil11