2010-03-06 10 views
30

Was bisher geschah:Suchmaschinen-Lösung für Django, die tatsächlich funktioniert?

Beschlossen mit Xapian als Suche Backend zu gehen, weil es alle Suchmaschinen-Funktionen hat, denn ich war auf der Suche, weiß über Unicode ergeben, hat nur wenige Abhängigkeiten und erfordert keine aufgeblähten Installation app-Server auf Spitze davon.

Versuchte Django und Haystack (plus Xapian-Heuhaufen, der Backend-Klebecode, um Haystack an Xapian zu binden), weil es auf einigen Blogs als "Arbeiten" beworben wurde. Funktioniert nicht. Weder Django-Heuhaufen noch das Xapian-Heuhaufen-Projekt bieten eine Versionskombination, die tatsächlich zusammenarbeitet. MASTER aus beiden Projekten ergibt einen Fehler von Xapian, also ist es überhaupt nicht stabil. Haystack 1.0.1 und xapian-hoystack 1.0.x/1.1.0 sind nicht API-kompatibel. In einer minimal funktionierenden Installation von Haystack 1.0.1 und xapian-haystack MASTER führt jede komplexe Abfrage zu Null-Ergebnissen aufgrund von Fehlern im Django-Heuhaufen oder im Xapian-Heuhaufen (ich habe das zweimal verifiziert), vielleicht weil die Unit-Tests teste wirklich sehr einfache Fälle und überhaupt keine Randfälle.

Versuchte Djapian. Der Quellcode ist mit Rechtschreibfehlern gespickt (wohlgemerkt, in Variablennamen, nicht in Kommentaren), die Dokumentation ist auch mit Zweideutigkeiten und veralteten Informationen gespickt, die niemals zu einer funktionierenden Installation führen werden. Es überrascht nicht, dass Nutzer selten nach Funktionen fragen, sondern wie sie überhaupt funktionieren.

Als nächstes auf der Platte: Exploring Solr (Installation einer Java-Umgebung plus Tomcat gibt mir Kopfschmerzen, ist die Maschine RAM-und CPU-eingeschränkt) oder Lucene (etwas weniger Kopfschmerzen, aber immer noch).

Bevor ich fortfahre, mehr Zeit mit einer Lösung zu verbringen, die vielleicht wie angekündigt funktioniert, würde ich gerne wissen: Hat jemand jemals eine echte Suchlösung in Django gefunden? Es ist mein ernst. Ich finde es sehr frustrierend zu lesen, dass "große Probleme meist gelöst sind", und dann merke ich, dass du nie eine funktionierende Installation aus dem Quellcode bekommen wirst, weil alle Blogger, die sich mit diesen "meist gelösten Problemen" beschäftigen, nie über die Grundinstallation hinaus gegangen sind Kopieren der offiziellen Tutorials.

sind also hier die Anforderungen:

  • muss 10-100 Bedingungen in einer Abfrage
  • muss suchen können handhaben + (Begriff muss vorhanden sein) und - (Begriff darf nicht vorhanden sein) , UND/ODER
  • muss mit beliebiger Gruppierung umgehen (dh Klammern um UND/ODER)
  • muss Django-ORM-Filterung vor oder nach der Volltextsuche zulassen (dh Vor-/Nachbearbeitung der Ergebnisse mit dem vollständigen Satz von Filter, die Django kennt)
  • Alternativ muss es eine Einrichtung sein, bulk-fetch das Ergebnis gesetzt und wandeln es in ein QuerySet
  • sollte leicht an der Maschine, also vorzugsweise nicht humongous JVM und Java-basierte app-Serverinstallation

Gibt es da draußen etwas, das das tut? Ich bin nicht an anekdotischen Beweisen oder Verweisen auf einige Blogposts interessiert, die behaupten, dass es funktionieren sollte. Ich würde gerne von jemandem hören, der tatsächlich ein voll funktionsfähiges Setup hat, das in der realen Welt unter realen Bedingungen mit echten Abfragen arbeitet.

EDIT:

mich wieder Lassen Sie wiederholen, dass ich nicht so viel Interesse an anekdotische Hinweise darauf, dass jemand, irgendwo eine etwas läuft Installation hat mit nicht spezifizierten Eigenschaften arbeiten. Ich war schon dort, habe alle Blogposts, Mailinglisten gelesen und mich mit den Autoren in Verbindung gesetzt, aber wenn es um die tatsächliche Umsetzung von realen Szenarien ging, funktionierte nichts wie angekündigt.

Auch, und ein Benutzer unten brachte diesen Punkt auch, in Anbetracht der TCO eines Projekts, ich bin definitiv nicht interessiert zu hören, dass jemand, irgendwo in der Lage war, es abziehen, wenn ein Verkäufer in einer unbekannten Nummer Fallschirm von Spezialisten, um die gesamte Installation mit spezifischem Domänenwissen zu versehen, das nirgends dokumentiert ist.

Wenn Sie also behaupten, dass Sie eine funktionierende Installation haben, die die Mindestanforderungen für eine vollständige Suche erfüllt (siehe Anforderungen oben), stellen Sie bitte Folgendes bereit, damit wir alle von einer Suchlösung für Django profitieren können tatsächlich löst das Problem:

  • genaue Linux-Distribution, Release-Version,
  • genaue Release-Version von Haystack (oder gleichwertig) und Release-Version der Suche Backend,
  • genaue Release-Version der Suchmaschine
  • öffentlich (!) Verfügbare Dokumentation, um alle Komponenten genau so einzurichten, wie Ihre Installation eingerichtet wurde, so dass die oben genannten Mindestanforderungen erfüllt werden.

Danke.

+0

Ich fürchte, dass Sie dort einen sehr gültigen Punkt haben. Ich habe versucht, entweder Djapian oder Heuhaufen + Xapian-Heuhaufen auf eine Website, die eine funktionierende Suchfunktionalität mit LIKE in MySQL implementiert hat, zu stecken, und bis jetzt sieht es so aus, als wäre es ein Albtraum, ein reproduzierbares, funktionierendes Setup vorzubereiten. Ich habe Djapian bereits abgeladen und bin mit Heuhaufen gegangen, aber obwohl es sehr schnell ist, habe ich schon ein paar Bugs gefunden (oder Dokumentationsengpässe, ich bin mir noch nicht sicher). –

Antwort

7

Kurze Antwort: Nein.

Wir gerettet und ging mit einem Google Custom Search. Obwohl die Seite über 10.000 mögliche Seitenaufrufe hat, behalten wir den Sitemap-Feed auf die 4.000 Seiten oder so und es kostet $ 250/Jahr, was ungefähr 2 Stunden meiner Zeit entspricht. Der Kunde ist glücklich und er fühlt sich mit den Ergebnissen wohl.

Ich würde gerne jemanden mit einer guten FOSS-Lösung kommen sehen, aber in einer kommerziellen Situation muss die TCO wirtschaftlich sinnvoll sein.

2

Ich (und meine Kollegen) haben erfolgreich Haystack verwendet, um eine ziemlich gute Suchfunktion zu erreichen.

Es ist einfach mit Heuhaufen und whoosh Backend zu beginnen; und wechseln zum Apache-Solr-Backend, wenn die Ausführung von Whoosh nicht akzeptabel ist.

Wir müssen wirklich einen ausführlichen Post darüber schreiben mit Links zu den Projekten, wo es funktioniert.

Für jetzt kann ich vorschlagen, dass Sie diese Suche: http://www.webdevjobshq.com/search/?q=rails implementiert mit Haystack mit Apache-Solr-Backend. Oder das: http://www.govbuddy.com/search/?q=Roy

+0

Es würde mich sehr interessieren zu erfahren, wie es funktioniert hat und welche Versionen, einschließlich der OS-Versionen (zB Solr auf Ubuntu 9.10) ein Problem sind, da es für Tomcat 5.5 kein Paket mehr gibt, daher die Solr -tomcat5.5-Paket kann nicht installiert werden, was bedeutet, viele Abhängigkeiten zu ziehen und zu kompilieren. – nikola

+0

Wie viele Suchbegriffe behandelt Whoosh? Und ist Whoosh in der tatsächlichen Entwicklung? Wenn man von der Trac-Website des Projekts ausgeht, ist es blockiert und es gibt immer noch fatale Fehler. – nikola

+0

Die Trac-Site ist veraltet, Whoosh ist zu bitbucket umgezogen: http://bitbucket.org/mchaput/whoosh/changesets/, und ist noch in aktiver Entwicklung. –

0

Ich benutze Djapian. Es war ziemlich einfach zu installieren und funktioniert gut. Es gibt ein Tutorial, das grundlegende Anwendungsfälle behandelt und den gesamten Integrationsprozess zeigt.

Ja, es hat einige Unklarheiten, aber Problem Tracker ist offen und Autoren beheben schnell Fehler und fügen Funktionen hinzu.

+1

Ich habe das Tutorial verfolgt, es funktioniert nicht. Bitte teilen Sie mir die genauen Versionen mit, die zu einer voll funktionsfähigen Installation geführt haben und die tatsächlich für reale Szenarien funktionieren. – nikola

1

Haben Sie in Betracht gezogen Sphinx?Was verwenden Sie als Datenspeicher? Es hat eine MySQL-Engine, die grandios funktioniert. Ich denke, dass es die meisten deiner Anforderungen erfüllt, außer dass ich nicht genau weiß, wie gut es in Django-ORM eingebunden werden kann.

Ich überlege sehr, Sphinx in einer meiner eigenen Django-Apps zu verwenden, um die Leistung in einem Auto-Suggest-Feld zu verbessern, das auf einem Korpus von 3,5 Millionen Datensätzen eine Präfix- und Infix-Suche durchführt. Aber ich bin noch nicht dazu gekommen es zu implementieren, also kann ich nicht mit Django + Sphinx Integration sprechen. Meine einzige Sphinx-Erfahrung ist mit der MySQL Engine und der direkten Abfrage von MySQL.

+0

Und genau das ist das Problem. Ich bin in der Vergangenheit auf Sphinx gestoßen, aber ich habe noch nie jemanden getroffen oder gelesen, wie man Sphinx tatsächlich in Django integriert, einschließlich spezifischer Versionsnummern, die tatsächlich kompatibel sind.Keywords vom Autor von django-sphinx in seinen eigenen Worten: "Nach der Installation müssen Sie ein paar Einstellungen in settings.py bearbeiten, was wiederum, dass ich an der Dokumentation bin, ist nicht auf der Website veröffentlicht." Ich werde das hier nicht anfassen, tut mir leid. – nikola

+0

Ich habe Django-Sphinx funktioniert gut. Ich benutze die neuesten Versionen von beiden, und Infix und Präfix Suche funktionieren gut. Sie erstellen massive Indizes, aber ansonsten funktionieren sie. Ja, die Dokumentation ist nicht großartig von Django-Sphinx, aber es reicht. Das Schöne daran ist, dass es eigentlich ein ziemlich kleiner Konnektor ist, und Sie können herausfinden, was passiert, wenn es nicht wie erwartet funktioniert. Sphinx ist ziemlich mächtig und schnell, und die Unterstützung im Forum ist gut. Und die Einstellungen, die er sagt, werden nicht gepostet ... Ich glaube, sie werden auf der Projektseite veröffentlicht. – mlissner

+0

Sphinx ist großartig, aber Django-Sphinx ist eine Katastrophe. Sparen Sie sich die Mühe und versuchen Sie etwas anderes. – yekta

11

Ich habe auch einige Django-Anwendungen mit xapian-Unterstützung entwickelt. Die größte von ihnen hat eine Xapian-Datenbank mit einem Index von 8G, die 2.4M-Dokumente speichert (einschließlich Forenbeiträgen, Wiki-Einträgen, Planeteneinträgen und Blogeinträgen) - immer noch wachsend.

Insgesamt bin ich ziemlich glücklich mit xapian. Es funktioniert sehr gut und ist einfach zu bedienen. Das einzige, was ich nicht mag, ist, dass xapian wegen eines Deadlocks nicht mit mod_wsgi (außer dem globalen Modus) arbeiten wird. Sie müssen also fastcgi verwenden (oder eine Verbindung zu xapian-tcpsrv herstellen oder einen eigenen Dienst schreiben).

Ich empfehle Ihnen, die Xapian-Bindungen direkt zu verwenden. Xapian bietet heutzutage eine Menge nützlicher Helfer (TermGenerator, QueryParser usw.), die sowohl die Indexierung als auch die Abfrage vereinfachen. Tatsächlich kann ich nichts abbilden, was eine zusätzliche Bibliothek rechtfertigen würde. Meiner Meinung nach sind sie alle komplizierter und erlauben kein effizientes Indexieren.

Das einzige, was Sie brauchen, ist ein gewisses Verständnis dafür, wie xapian funktioniert. (Was sind Begriffe? Was sind Werte? Was stemming und wo soll ich es verwenden? Und so weiter). Sie können alle diese Themen auf der xapian-Website finden, und sobald Sie diese Konzepte verstehen, wird der Umgang mit xapian einfach.

Auch die XAPIAN API ist extrem stabil. Ich benutze es schon lange vor der Version 1.0 und hatte nie Probleme mit API-Änderungen oder Versionskonflikten. Das einzige, was sich geändert hat, ist, dass all diese Helfer (Abfrageparser, Tokenizer, etc.), die ich einmal für mein Django-Projekt geschrieben habe, jetzt nutzlos sind, weil ähnliche Klassen ihren Weg in den Xapian-Kern gefunden haben.

Also, um zusammenzufassen, geben Sie einfach die direkte Verwendung von Xapian-Bindings einen Versuch.

9

Ich kann für Django-Haystack mit dem Xapian-Backend (Im Interesse der vollständigen Offenlegung bin ich der Autor des Xapian-Heuhaufen-Backend) in einer realen Produktionsumgebung bürgen. Wir verwenden derzeit Haystack/Xapian auf mehreren Websites, von denen die größte mehr als 20.000 registrierte Benutzer und eine Xapian-Datenbank mit mehr als 20.000 Dokumenten mit mehr als 143.000 eindeutigen Begriffen für eine Gesamtgröße von ~ 141 MB hat.

Da keine Kombination von Haystack und dem Xapian-Backend laufen konnte, gebe ich zu, dass ich nicht so gewissenhaft war, wie ich es bei meinem Tagging hätte und daher gibt es einige Verwechslungen mit den Versionen. Sie sollten jedoch in der Lage sein, den aktuellen Master beider Codebasen ohne Probleme zu verwenden. Wenn dies nicht der Fall ist, wäre ich mehr als glücklich, bei Problemen zu helfen. Sie müssen jedoch etwas genauer auf das Problem eingehen. Einfach zu sagen "es hat nicht funktioniert" ist nicht genug Information.

Daniel und ich tun unser Bestes, um rechtzeitig auf Github zu reagieren. Außerdem sind wir normalerweise beide tagsüber im #haystack IRC Channel und der Django-Heuschober Google Group verfügbar.

verwendet Versionen:

  • Haystack 1.0BETA mit Xapian-Haystack 1.1.0BETA
  • Haystack 1.0.1FINAL mit Xapian-Haystack 1.1.3BETA

Der meisten der Seiten, die wir mit Haystack bereitgestellt haben wurden mit Ubuntu 8.04 LTS mit Xapian 1.0.5

7

Dem von Ihnen angeforderte .

  • genaue Linux-Distribution, Release-Version - Ubuntu 9.04 & 9.10
  • genaue Release-Version von Haystack (oder gleichwertig) - Haystack 1.0 sowie Master
  • Release-Version von Such Backend - Die Solr & Whoosh Backends mit Haystack enthalten
  • genaue Release-Version der Suchmaschine - (!) Solr 1.3, Solr 1.4 & Whoosh 0.3.15
  • öffentlich zugängliche Dokumentation, wie alle Komponenten zur Einrichtung exactl y in der Weise, in der Ihre Installation so eingerichtet wurde, dass die oben genannten Mindestanforderungen erfüllt werden.

Darüber hinaus ist es die Standard-Konfigurations-Bits aus dem Tutorial, sowie alle zusätzlichen Überschreibungen aus (was ich nicht verknüpfen kann, dank Stack-Überlauf) wie benötigt.

Als Maintainer von Haystack betreibe ich aktiv alle oben genannten Setups. Die kleinste Heuhaufen-Installation (Haystack 1.0 + Whoosh) ist ~ 600 Dokumente. Ein etwas größerer (Haystack Master + Solr 1.4) ist ~ 4000 Dokumente. Die größte bekannte Einrichtung (Haystack Master + Solr 1.4) ist ~ 3 Millionen Dokumente.

Ich versuche generell, Stack Overflow zu vermeiden, also sei nicht überrascht, wenn du nichts weiter von mir siehst. Die Mailingliste ist der beste Ort für Unterstützung, aber aufgrund Ihrer bisherigen Antworten bin ich mir sicher, dass Sie mich lieber einfach hier rausschmeißen würden.

+0

Wenn Sie "genaue Fragen stellen, um Behauptungen von Entwicklern zu überprüfen" als "Abfall" bezeichnen würden, na gut. Der Punkt, den ich versuche zu machen ist, dass, wenn Sie als Entwickler von Haystack nur eine Installation von 600 bis 4000 indexierten Dokumenten haben, Sie keine Behauptungen machen sollten, dass Ihre Software für die reale Welt geeignet ist - weil Sie " Ich habe es noch nicht verifiziert. Außerdem habe ich bereits die oben genannten Versionen ausprobiert - Solr auf Ubuntu 9.x ist ein No-Go, da es kein Tomcat 5 Paket gibt, Master von Haystack/Xapian-Heuhaufen sind nicht stabil usw. Also nein-geh für mich. – nikola

Verwandte Themen