2016-03-29 1 views
0

Ich arbeite mit Apache Solr und möchte detailliertere Informationen über einige Abfrageoptionen erhalten. Ich entdeckte Facettenabfragen und fragte mich, wann genau sie wesentliche Vorteile bringen; vor allem im Fall des folgenden Beispiels:Solr 4.5: Wann ist Solr facet Abfrage besser als einfache Abfrage?

Es ist ein Bestand an Büchern vorhanden, der auf einem Solr-Server gespeichert wird. Trotz der allgemeinen Attribute, die ein Buch haben sollte, haben sie eine ISBN. Daten über Bücher werden von Dritten zur Verfügung gestellt. Es ist also wichtig zu überprüfen, dass es keine doppelten ISBN im System gibt. Um zu überprüfen, ob die ISBN eines Buches ein Duplikat ist, muss es einen gerouteten Pfad durchlaufen, in dem - leider - jedes Buch einzeln verarbeitet wird, ohne dass Informationen über vorausgehende oder nachfolgende Prozesse vorhanden sind.

Die Frage ist:
a) Wenn Sie einfach Solr Abfrage mit dem aktuellen Buch ISBN und die gesamten Ergebnisse überprüfen oder
b) sollten Sie eine Facette Abfrage mit einem f.isbn.facet.mincount=2 und prüfen Sie senden, wenn das Ergebnis der aktuellen enthält Buch ISBN?

In beiden Fällen ist das Caching nicht möglich. Die Anzahl der Abfragen entspricht also immer der Anzahl der verarbeiteten Bücher. Ich weiß einfach nicht, wie Solr arbeitet und kann daher diese Entscheidung ohne weitere Informationen nicht treffen, zumal die Anzahl der Abfragen nicht durch eine der oben genannten Möglichkeiten reduziert wird.

Antwort

0

Wenn Sie eine Abfrage ausführen - eine Abfrage ausführen. Lucene ist in hohem Maße darauf optimiert, Abfragen auszuführen. Das sollten Sie also tun. Eine Facettenabfrage dient zum Erstellen von Facetten (Zählungen) aus beliebigen Abfragen - so macht es intern dasselbe. Wenn Sie eine Facette generieren und diese dann durchlaufen, muss Lucene weitaus mehr Dokumente anzeigen, als wenn Sie nur nach einem einzelnen Wert suchen.

Die beste Strategie, um einen Leistungsschub zu erzielen, wäre, diese Operationen im Stapelbetrieb durchzuführen - prüfen Sie 500 Bücher im selben Stapel (d. H. isbn:(123 OR 321 OR 567 OR 765)), und gehen Sie dann mit Ihrem Code um. Wenn diese Updates von vielen Systemen parallel ankommen können, ohne eine einzige Quelle zu durchlaufen, müssen Sie entscheiden, wie viel Zeit Sie aufwenden können, bevor Duplikate in den Streams erscheinen (diese Race Condition kann auch mit nur einem Buch vorkommen), da zwei Streams nach einem einzelnen isbn fragen können und ein negatives Ergebnis erhalten, bevor sie getrennt von beiden Streams hinzugefügt werden.