Erstellung einer Volltextsuchmaschine: Wo soll ich anfangen [geschlossen]

8

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).

    
Gabriele D'Antona 06.10.2008, 21:10
quelle

13 Antworten

4

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.

    
Chuck 07.10.2008, 02:30
quelle
7

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
  •   
    
Mark Cidade 07.10.2008 02:06
quelle
6

Ich fand diese zwei Bücher sehr nützlich, wenn ich Volltext-Suchmaschinen baute.

Informationsabruf

Gigabytes verwalten

    
Ferruccio 06.10.2008 21:14
quelle
3

Wie immer in wikipedia starten. Beim ersten Start wird normalerweise ein invertierter Index erstellt.

    
Goran 06.10.2008 21:21
quelle
3

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.

    
Matthias Wandel 06.10.2008 22:58
quelle
3

Lucene oder Autonomie ! Dies sind keine Out-of-the-Box-Lösungen für Sie. Sie müssen Wrapper über ihre Schnittstellen schreiben.
 Sie kümmern sich sicherlich um die Stemming-, Grammatik-, Beziehungsoperatoren usw.

    
Cherian 07.10.2008 10:41
quelle
1

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.

    
Martin Beckett 06.10.2008 21:59
quelle
1

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.

    
Xavier Martinez-Hidalgo 08.10.2008 01:37
quelle
0

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.

    
warren 06.10.2008 21:23
quelle
0

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.

    
Rick Harding 06.10.2008 22:49
quelle
0

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.

    
Justin Bozonier 07.10.2008 02:40
quelle
0

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>     

olliej 08.10.2008 02:26
quelle
-1

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.

    
PythonMaster 04.01.2017 21:45
quelle

Tags und Links