PostgreSql XML-Text-Suche
Ich habe eine text-Spalte in einer Tabelle. Wir speichern die XML-Daten in dieser Spalte. Jetzt will ich Suche für tags und Werte
Beispiel Daten:
<bank>
<name>Citi Bank</name>
.....
.....
/<bank>
Ich möchte die folgende Abfrage ausführen:
select * from xxxx, wo to_tsvector('Deutsch',xml_column) @@ to_tsquery('<name>Citi Bank</name>
')
Dies funktioniert gut, es funktioniert aber auch für tags wie "name1" - oder kein tag.
Wie muss ich meine setup-Suche, um für diese zu arbeiten, so bekomme ich eine exakte übereinstimmung für den tag und Wert ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mit der xpath-Funktion wie diese
ABER es wird nicht die full-text search-index. Sie könnte eine Unterabfrage verwenden, finden Sie wahrscheinlich entspricht und vermeiden Sie vollständige scans, und der xpath-Ausdruck für die immer richtigen Antworten, oder erstellen Sie eine Funktion, index, wenn die Abfragen werden immer die gleichen.
//text()
, soarray_to_string( xpath('path//text()', content)::text[] , '')
erhalten Sie den gesamten text aus, zB., ein HTML-Dokument mit vielen intra-tags.Möchten Sie vielleicht zu überdenken, die Speicherung von XML in einer Datenbank, anstatt Sie sich auf das einfügen der Daten in verknüpfte Tabellen, da die Verwendung von XML ist ein schlechter Ersatz für eine relationale speichern. Auch wenn Sie mit XML in der Datenbank, verwenden Sie den XML-Typ, nicht den TEXT geben, und einen index erstellen, der wie folgt (ja, im Grunde müssten Sie einen index pro xpath-Ausdruck):
dann, Abfrage es so:
und dies wird mit dem index, wie ERKLÄREN Sie anzuzeigen.
Wichtig ist nur die Umwandlung in TEXT[], da XML[], die die xpath-Funktion gibt, ist nicht indizierbaren standardmäßig.
//text()
, soarray_to_string( xpath('path//text()', content)::text[] , '')
erhalten Sie den gesamten text aus, zB., ein HTML-Dokument mit vielen intra-tags.