Nach https://cwiki.apache.org/confluence/display/solr/Faceting kann ich facet.offset
und facet.limit
zu paginieren.Deep Paging auf Facette Ergebnisse
Ich denke, diese sind analog zu start
und rows
für normale Abfrageergebnisse.
Aber wäre das nicht sehr langsam, wenn ich zu viele Facettenergebnisse habe? Nach https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results:
Wenn Sie wünschen eine sehr große Anzahl von sortierten Ergebnisse von Solr zu holen in einem externen System zu füttern, kann sehr ineffizient mit sehr großen Werten für die Start- oder Zeilen Parameter sein. Die Paginierung mit Start und Zeilen erfordert nicht nur Solr zu berechnen (und sortieren) im Speicher alle die übereinstimmenden Dokumente, die für die aktuelle Seite, abgerufen werden sollen, sondern auch alle Dokumente, die auf vorherigen Seiten erschienen wären.
Also für tiefe Paging bei normalen Abfragen, würde ich stattdessen eine cursorMark
verwenden.
So
1) Bin ich richtig, dass tief Paging auf Ergebnisse Facette mit facet.offset
hat die gleiche Leistung conerns wie das Zitat oben?
2) Gibt es etwas wie cursorMark
oder andere effizientere tiefe Paging für Facettenergebnisse statt ?
@Override
public boolean collect(BytesRef term, int count) {
if (count > min) {
// NOTE: we use c>min rather than c>=min as an optimization because we are going in
// index order, so we already know that the keys are ordered. This can be very
// important if a lot of the counts are repeated (like zero counts would be).
spare.copyUTF8Bytes(term);
queue.add(new SimpleFacets.CountPair<>(spare.toString(), count));
if (queue.size()>=maxsize) min=queue.last().val;
}
return false;
}
und ein wenig über:
maxsize = limit>0 ? offset+limit : Integer.MAX_VALUE-1;
die im Grunde zu führt