• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Begrenzen des Lucene Ergebnissets mit "start" und "limit"

malstroem

New member
Hallo zusammen,

wir haben Zend_Search_Lucene erfolgreich in ein großes Dokumentenmangementsytsem mit mehreren tausend Dokumenten (hauptsächlich pdf und office) integriert. Als Frontend nutzen wir ein AjaxFramework (ExtJs bzw. Sencha).

Wir wollen nun die Ergebnisausgabe auf mehrere Seiten (1-n) verteilen.
Mit den in der Dokumentation genannten Funktionen getResultSetLimit() und setResultSetLimit() können wir aber bislang nur die Anzahl der Ergebnisse für die erste Seite definieren. Wie kann man hier einen Offset (start) einstellen, ähnlich wie bei SQL, so dass beispielsweise nur die Ergebnisse 51-100 angezeigt werden?

Man könnte das ganze natürlich vor der Rückgabe filtern, aber eleganter und wahrscheinlich auch performanter wäre es natürlich, nur die betreffenden Dokumente aus dem Index zu holen.

Wir freuen uns über jeden Tip.
Vielen Dank
Thomas

 
Zuletzt bearbeitet:

malstroem

New member
sorry - ich habe gerade erst folgenden Thread gefunden: http://www.zfforum.de/showthread.php?t=2940

Dort wird das gleiche Theam behandelt und es steht dort im Prinzip, dass es wohl nicht geht, bzw. nichts brächte einen offset zu setzen und man das ganze lieber erst danach austückelt...

Wenn das noch so unverändert gilt - gut.
Wenn es hierzu neue Erkenntnisse oder Ansätze gibt - immer her damit :)
 

KingCrunch

New member
Wenn ich so drüber nachdenke (hab den alten Beitrag nicht gelesen): Die Reihenfolge ist abhängig von der Platzierung, also muss, wenn man Platz 20 haben will, die Plätze 1 bis 19 sowieso berechnet werden. Und weil das alles in PHP geschieht, würd eine Begrenzung dir nur einen Schritt abnehmen (array_slice()), aber keinen Speicher-, oder Performance-Vorteil liefern.

Denkbare "Alternativen" wären Caches (oder ähnliches ;)). zB könntest du die ersten 100 Treffer abfragen und in einzelnen Blöcken (zB je 20 Einträge) cachen, dann würde pro Aufruf eine Abfrage auf den Cache reichen. Ist der Cache abgelaufen, muss eben neu gesucht werden. Oder man speichert die ersten 100 Ergebnisse in einer Datenbank, dann kann man mit LIMIT rangehen. In beiden Fällen muss man auch wieder neu abfragen, wenn man zB Dokument 101 haben will.
 

malstroem

New member
Hi KingCrunch,

danke für Deine Antwort.
Ich könnte mir aber doch bei der ersten Abfrage (z.B. Hits 1-20) den Scorewert des letzen Hits (20) in einer Variable merken und dann bei der nächsten Abfrage direkt dort starten (sprich Hits 21-40).

Ich müsste dann den Wert nicht erneut berechnen... was dann ja evt. doch einen Performanecegewinn brächte.
Kann man bei der Lucene Abfrage sowas machen wie "where score > x"?

Den Ansatz mit dem Caching des (gesamten) Suchergebnisses verfolgen wir auf jeden Fall parallel...
 
Zuletzt bearbeitet:

KingCrunch

New member
Ich könnte mir aber doch bei der ersten Abfrage (z.B. Hits 1-20) den Scorewert des letzen Hits (20) in einer Variable merken und dann bei der nächsten Abfrage direkt dort starten (sprich Hit 21-40).
Nein, genau das ist es ja. Bei der nächsten Abfrage kennt er das alte er Ergebnis nicht mehr. Um jetzt ab 21 anfangen zu können, muss er erstmal wieder berechnen, was die Treffer 1 bis 20 sind, um sie dann zu verwerfen. Anders siehts bei MySQL mit LIMIT auch nicht, bloss das du es dort nicht direkt mitbekommst und der es auch etwas effizienter anstellt ;)

Ich müsste dann den Wert nicht erneut berechnen... was dann ja evt. doch einen Performanecegewinn brächte.
Kann man bei der Lucene Abfrage sowas machen wie "where score > x"?
Sagte ich schon: Die ganzen Ergebnisse irgendwo ablegen und dann ohne Lucene da her die Ergebnisse holen.
 
Oben