Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

1

11.02.2018, 15:09

MongoDB: Text-Index Struktur

Moin allerseits.
Ich setze mich momentan recht stark mit Volltextsuchen, besonders mit der von MongoDB, auseinander. Weiß jemand wie der Text-Index von MongoDB in den Metadaten der Dokumente gespeichert wird? Ich finde dazu einfach keine verlässliche/aussagekräftige Quelle. Ich würde einfach gerne wissen, wie der Text-Index des Dokuments {"content": "Dogs are man's best friend"} aussieht, wenn das Feld content einen Text-Index besäße. Meiner Meinung nach müsste es sowas wie {"_words": ["dog", "man", "best", "friend"]} sein, aber es gibt einfach keine offizielle Aussage oder Beispiel. Das einzig konkrete was ich gefunden habe war diese Aussage:

Zitat von »https://docs.mongodb.com/manual/core/index-text/«


text indexes can be large. They contain one index entry for each unique post-stemmed word in each indexed field for each document inserted.

Die mir allerdings keine Auskunft über die Struktur gibt.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

2

11.02.2018, 15:46

Normalerweise wird doch der Index so rum aufgebaut:
"dog": Doc1, Doc2, Doc3
"man": Doc2
"best": Doc2, Doc3
"friend": Doc1, Doc2

Die Aussage scheint mir da ziemlich eindeutig zu sein.

Die schreiben pro Wort pro Feld einen Eintrag. Also:
"dog" [in content]: Doc1, Doc2, Doc3
"man" [in content]: Doc2
"best" [in content]: Doc2, Doc3
"friend" [in content]: Doc1, Doc2
...

Gäbe es noch ein indiziertes Textfeld sähe das dann so aus:
"dog" [in content]: Doc1, Doc2, Doc3
"dog" [in title]: Doc2, Doc3
"man" [in content]: Doc2
"man" [in title]: Doc3
"best" [in content]: Doc2, Doc3
"best" [in title]: Doc1
"friend" [in content]: Doc1, Doc2
"green" [in title]: Doc2, Doc3
...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Chromanoid« (11.02.2018, 15:58)


Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

11.02.2018, 15:56

Das wäre dann ein Inverted Index wie ihn Elasticsearch und SolR etc. benutzen. Ich weiß das MongoDB keine Inverted Indizes verwendet, sondern seine Index-Strukturen auf herkömmlichen B-Bäumen beruhen.

Nochmal geprüft: MongoDB verwendet für alles B-Bäume also Forward Indizes. Ich hab' nur keinen Schimmer, wie sowas für Text-Indizes aussieht.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (11.02.2018, 16:03)


4

11.02.2018, 16:46

Ein "Inverted" Index wirst Du bei der Suche nach Schlüsseln, die Teil eines Dokuments sind, doch immer haben. Ein B-Baum ist doch auch eine Implementierung eines Inverted Index. Das Vokabular ist glaube ich einfach irreführend. Siehe auch hier https://stackoverflow.com/questions/7727…plain-old-index


Hier mal ein B-Tree für die Implementierung eines "Inverted" Index: http://data.at.preempted.net/INDEX/articles/bplustree.pdf

Werbeanzeige