Ich möchte eine Webanwendung mit Google App Engine schreiben (die Referenzsprache wäre also Python ). Meine Anwendung benötigt eine einfache Suchmaschine, damit die Benutzer Daten finden können, die Schlüsselwörter angeben.
Zum Beispiel, wenn ich eine Tabelle mit diesen Zeilen habe:
1 Bürofläche
2 2001: Ein Raum Odyssee
3 Brasilien
und der Benutzer fragt nach "Leerzeichen", Zeilen 1 und 2 würden zurückgegeben werden. Wenn der Benutzer nach "Bürofläche" fragt, sollte das Ergebnis auch die Zeilen 1 und 2 sein (Zeile 1 zuerst).
Was sind die technischen Richtlinien / Algorithmen, um dies auf einfache Weise zu tun?
Können Sie mir gute Hinweise auf die dahinterstehende Theorie geben?
Danke.
Bearbeiten : Ich suche hier nach nichts Komplexem (z. B. Indizierung von Tonnen von Daten).
Ich würde es nicht selbst bauen, wenn möglich.
App Engine enthält die Grundlagen einer Volltext-Suchmaschine und es gibt eine tolle Blogpost hier , die beschreibt, wie man es benutzt.
Es gibt auch eine Feature-Anfrage im Bug-Tracker , die anscheinend erscheint etwas Aufmerksamkeit in letzter Zeit, also sollten Sie vielleicht aushalten, wenn Sie können, bis das implementiert ist.
Lesen Sie Tim Brays Reihe von Beiträgen zu diesem Thema .
>
- Hintergrund
- Verwendung von Suchmaschinen
- Grundlagen
- Präzision und Erinnerung
- Suche engine Intelligenz
- Knifflige Suchbegriffe
- Stoppwörter
- Metadaten
- Internationalisierung
- Ranking Ergebnisse
- XML
- Roboter
- Anforderungsliste
Hier ist eine originelle Idee:
Erstellen Sie keinen Index. Ernsthaft.
Ich war vor einiger Zeit mit einem ähnlichen Problem konfrontiert. Ich brauchte eine schnelle Methode, um eine Vielzahl von Texten aus der Dokumentation zu durchsuchen. Ich musste nicht nur Wörter, sondern Wortnähe in großen Dokumenten (ist dieses Wort in der Nähe dieses Wortes) zusammenbringen. Ich habe es am Ende in C geschrieben und die Geschwindigkeit hat mich überrascht. Es war schnell genug, dass es keine Optimierung oder Indexierung brauchte.
Mit der Geschwindigkeit der heutigen Computer, wenn Sie Code schreiben, der direkt auf dem Metall läuft (kompilierter Code), brauchen Sie oft keinen Algorithmus vom Typ Bestellprotokoll (n), um die benötigte Leistung zu erhalten.
Erstellen Sie zuerst Ihren Index.
Gehe durch die Eingabe, spalte in Wörter
Prüfen Sie für jedes Wort, ob es bereits im Index vorhanden ist, ob es die aktuelle Datensatznummer zur Indexliste hinzufügt, oder fügen Sie die Wort- und Datensatznummer hinzu.
Um ein Wort nachzuschlagen, gehen Sie zum (möglicherweise sortierten) Index und geben alle Datensatznummern für dieses Wort zurück
Es ist sehr esy, dies für eine reasoable Größenliste zu tun, die Python's eingebaute Lagertypen verwendet.
Als zusätzliche Verfeinerung möchten Sie nur den Basisteil eines Wortes speichern, z. B. "find" für "finding" - Stemming-Algorithmen nachschlagen.
Das Buch Einführung in Information Retrieval bietet eine gute Einführung in das Gebiet.
Eine Dead-Tree-Version wird von Cambridge University Press veröffentlicht, aber Sie können auch eine kostenlose Online-Ausgabe (in HTML und PDF) unter dem obigen Link finden.
Siehe auch eine Frage, die ich gestellt habe: Vorgehensweise: Ranking der Suchergebnisse .
Sicherlich gibt es mehrere Ansätze, aber das ist die, die ich für jetzt verwende.
Ehrlich gesagt, schlauere Leute als ich habe diese Dinge herausgefunden. Ich würde die Solr-App laden und Json-Anrufe von meiner appengine App machen und solr sich um die Indexierung kümmern.
Ich habe diesen Artikel gerade an diesem Wochenende gefunden: Ссылка
Sieht nicht allzu kompliziert aus, um ein einfaches zu machen (obwohl es eine starke Optimierung benötigen würde, um eine Lösung vom Typ Enterprise zu sein). Ich plane einen Proof of Concept mit einigen Daten aus Project Gutenberg.
Wenn du nur etwas suchst, von dem du lernen kannst, dann denke ich, dass das ein guter Anfang ist.
Schauen Sie in das Buch "Gigabytes verwalten", das die Speicherung und den Abruf riesiger Mengen von Klartextdaten - z. Komprimierung und tatsächliche Suche und eine Vielzahl der Algorithmen, die für jedes verwendet werden können.
Auch für die reine Textrecherche ist es am besten, wenn Sie ein Vektor-basiertes Suchsystem anstelle eines Keyword- & gt; -Dokument-Indexierungssystems verwenden, da vektorbasierte Systeme viel schneller sein können und, was noch wichtiger ist, Relevanzranglisten relativ trivial bereitstellen können / p>
Versuchen Sie Folgendes: Nehmen wir an, die Variablentabelle ist Ihre Liste mit Sucheinträgen.
%Vor%Es durchläuft nur alle Elemente, um zu sehen, ob die Abfrage in einem von ihnen ist. Es funktioniert für eine einfache In-App-Suchfunktion. Vielleicht nicht für das ganze Internet.
Tags und Links python full-text-search