2009-08-22 9 views
1

Ich bin so etwas wie dies zu tun:wie alle Dokumente bekommen mit acts_as_solr

Item.find_by_solr('name:ab*') 

und es sagt, dass es 297 Ergebnisse liefert:

=> #<ActsAsSolr::SearchResults:0xb6516858 @total_pages=1, @solr_data={:docs=>[doc1, doc2, doc3...]}, :max_score=>1.6935261, :total_pages=>1, :total=>297}, @current_page=1> 

Item.count_by_solr('name:ab*') also returns 297. 

Doch wenn Iterierte es nur 10 Stück zeigt:

Item.find_by_solr('reference_name:ab*').each do |i| puts i end 

Ich habe versucht, {: per_page => 80} und: limit =>: alle, aber es zeigt immer noch diese 10. Irgendeine Idee, was ich vermisse?

Antwort

1

Vom Solr FAQ:

Wie kann ich wieder alle die passenden Dokumente bekommen? ... Wie kann ich eine unbegrenzte Anzahl von Zeilen zurückgeben?

Dies ist in den meisten Fällen unpraktisch. Menschen Regel wollen nur, dies zu tun, wenn sie wissen, dass sie mit einem Index, dessen Größe handelt garantiert das Ergebnis Sets werden immer klein genug sein werden , dass sie feasibly können in einer überschaubaren Menge übertragen werden - aber wenn das ist Geben Sie einfach, was Sie eine "handhabbare Menge" als Zeilen param und erhalten Sie das Beste aus beiden Welten (alle Ergebnisse, wenn Ihre Annahme richtig ist, und eine Vernunft Kappe auf die Ergebnisgröße, wenn sich herausstellt Ihre Annahmen sind falsch)

Wie für eine Grenze mit acts_as_solr Angabe, versuchen Sie so etwas wie :limit => 80

+0

Haben Sie meine Frage gelesen? Ich sagte, ich habe es schon versucht: limit und: per_page und es hat nicht funktioniert. –

+5

Ja, tat ich. Sie erwähnten: per_page => 80 und: limit =>: alles außer nicht: limit => Warum sollte ich davon ausgehen, dass Sie es versucht haben? –

0

ich in meinem skizzenhafte Notizen, die Sie parser_methods.rb, um l ändern können. 75, um nur AR IDs zurückzugeben, nicht die Objekte selbst. Einen Versuch wert in großen Datensätzen.

1

als @Mausch sagte Solr (und durch Erweiterung acts_as_solr) standardmäßig 10 Ergebnisse. Sie können die Option: limit verwenden, um dies zu erhöhen, aber es dauert nur eine Fixnum, nicht das: all-Symbol. Also gib an: limit mit einer Fixnum.

0

Sie müssen den Parameter: offset in Ihrer Abfrage angeben.

So zu der die nächsten 10 Einträge (11. bis 20.) von Artikel sehen Sie, dies zu tun haben,

 
Item.find_by_solr('name:ab*', :offset => 10) 

und die nächsten 10 Einträge zu sehen, müssen Sie wieder erhöhen, um die: Offsetparameter durch 10. Die nächsten 10 Einträge würden also so aussehen.

 
Item.find_by_solr('name:ab*', :offset => 20) 

10 Einträge abgerufen werden, weil der der Standardwert des: Grenz-Parameter 10. ist es etwas können wir anderes ändern, wenn wir zu einem Zeitpunkt mehr als 10 Einträge holen wollen.

 
# This query fetches 30 items, offset by 30. (assuming more than 30 entries are found by this query) 
Item.find_by_solr('name:ab*', :limit => 30, :offset => 30) 
Verwandte Themen