Wie geht eigentlich: Indexierung und Volltextsuche über mehrere Dokumente?

temi

Top Contributor
Ich würde mich gerne mal mit diesem Thema beschäftigen, aber finde dazu nicht viel sinnvolles. Das wird anscheinend hauptsächlich an Unis behandelt und es gibt wenig für normale Menschen verfügbares Material dazu. Oder ich bin zu blöd zum Suchen ;)

Ich bin über viele Begriffe, wie Suffixtree, Trie, Suffixarray gestolpert, bin aber nicht sicher, ob mir die helfen.

Meine naiver Ansatz für eine Indexierung wäre es einfach Texte Wort für Wort durchzugehen und in einer Datenbank zu erfassen. Sogenannte Stoppwörter (also unwichtige Worte bleiben davon ausgenommen). Dazu merkt man sich noch in welchem Dokument das Wort enthalten gewesen ist und an welcher Stelle im Dokument (Zeile? Wortindex? Was ganz anderes?). Fertig.

Wäre das wirklich so einfach?

Hat da jemand Informationen dazu? Oder sich schon mal mit beschäftigt?

Danke,
temi
 

httpdigest

Top Contributor
Naja, du sagst einfach "in einer Datenbank erfassen". Damit hast du eigentlich noch gar nichts gesagt. :)
Was genau meinst du mit "Datenbank"? Meinst du ein relationales Modell oder ein dokumentenbasiertes Modell oder ein Key/Value-Modell oder ein Graphenmodell?
Und was soll die Abfragesprache sein?
Kurz: Für so etwas wie einen Volltextindex brauchst du natürlich geeignete Datenstrukturen, die eher ungünstig mit einem relationalen Modell abgebildet werden können. Wie Lucene (die Suchengine hinter Elastic Search) das macht, steht z.B. ganz gut hier: https://stackoverflow.com/questions/2602253/how-does-lucene-index-documents#answer-43203339
Und ja: Auch RDBMSes verwenden natürlich in ihren Storage Engines geeignete Datenstrukturen wie B-Trees, um Tupel/Entitäten effizient zu suchen, decken aber noch ganz andere OLTP-Anforderungen ab, wie etwa Transaktionalität, was ein Suchindex nicht muss.
 

temi

Top Contributor
Damit hast du eigentlich noch gar nichts gesagt.
Ich kann ja auch nichts sagen. Ich hab ja gefragt! ;)

Und darum auch "naiver" Ansatz. In diesem Ansatz hätte ich im Anschluss eine Liste von Worten, wie in einem Wörterbuch. Und eine weitere Liste, die ein Wort einer Fundstelle zuordnet. Mal einfach formuliert ohne genauer auf Strukturen einzugehen. Das entspricht im Prinzip Map<String, List<Source>>

Aber danke für den Link. Ich werde mir das mal Durchlesen.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben