Ich habe einen Volltextindex für eine Tabelle. Ist es möglich, die im Index ( gist
oder gin
) verwendeten Begriffe abzurufen ? Wenn möglich mit Gewichten?
Zu klären:
Wenn ich folgende Tabelle habe:
create table "test" (id integer, thing tsvector);
Ich mache dann einen GIST-Index darauf:
create index thing_index on test using gist (thing);
Dann einige Daten:
insert into test (id, thing)
values (1, 'one'),(2, 'two'), (3, 'three'), (4, 'one'), (5, 'two');
Der Index thing_index
enthält die folgende Zuordnung:
'one' => {1, 4}
'two' => {2, 5}
'three' => {3}
Ich möchte die folgende Antwort aus dem Index erhalten:
'one',
'two',
'three'
Vielleicht sogar mit Ranglisten:
'one' => 2
'two' => 2
'three' => 1
Ich weiß, dass ich dies selbst tun kann, indem ich meinen eigenen Index scanne und erstelle, aber ich möchte ihn nach Möglichkeit aus Postgres herausholen.
Antworten:
Wenn ich Ihre Frage richtig verstehe und es überhaupt nicht klar ist, versuchen Sie, Informationen zurückzuziehen, soweit die IDs mit einem Wert verbunden sind. Ich glaube nicht, dass Sie es einfach aus dem Index in PostgreSQL ziehen können, da der Index keine Sichtbarkeitsinformationen enthält und Sie daher eine Menge zufälliger E / A haben und darauf warten, dass sich die Platten drehen.
Die Abfrage für Ihren Testfall lautet:
Angenommen, Sie haben eine Version, die hoch genug ist, um array_agg zu haben.
In meinem System (9.1) gibt mir dies:
das ist was du suchst, oder?
quelle
Und was ist mit:
Funktioniert auf einen Blick für mich (S. 9.1) und zeigt eine Hitliste der in den Dokumenten verwendeten Wörter.
quelle