TSearch2 Index über mehrere Tabellen

Fragen und Probleme rund um die Abfragespache SQL.

TSearch2 Index über mehrere Tabellen

Beitragvon alexander_ro » Fr 5. Okt 2007, 13:28

Hallo,

ich bräuchte einen Volltextindex der aus mehreren Splaten und Tabellen besteht. Mit mehreren Spalten in einer Tabelle habe ich noch hinbekommen aber mit mehreren Tabellen ist mir unklar.

Geht das?
Wenn ja wie erzeugt man einen solchen Index bzw. frägt ihn wieder ab?

Grüße
Alexander
alexander_ro
Benutzer
 
Beiträge: 82
Registriert: So 12. Nov 2006, 13:29

Beitragvon akretschmer » Fr 5. Okt 2007, 13:38

alexander_ro hat geschrieben:Hallo,

ich bräuchte einen Volltextindex der aus mehreren Splaten und Tabellen besteht. Mit mehreren Spalten in einer Tabelle habe ich noch hinbekommen aber mit mehreren Tabellen ist mir unklar.

Geht das?
Wenn ja wie erzeugt man einen solchen Index bzw. frägt ihn wieder ab?

Grüße
Alexander


Kannst Du mal erklären, was Du erreichen willst?

Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5936
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon alexander_ro » Fr 5. Okt 2007, 13:55

Ich habe in zwei Tabellen in der einen sind Titel und der anderen Autoren gespeichert. Es sind immer mehrere Einträge pro Produkt möglich z.B Title, Untertitel oder Titel älterer Auflagen. Autoren kann es natürlich auch mehrere pro Produkt geben.

Meine Suchfunktion soll dann nach Stichwort die Treffer in den Spalten Titel und Autor liefern und als eine Ergenismenge nach der Product-Sprache sortieren. Auserdem müssen doppelte die gefunden wurden weil zum Beispiel der Autor im Titel vorkommt elimeniert werden.

Was ich vermeiden möchte ist dass (wie bei amazon zum Beispiel) die Suche nichts mehr findet wenn man ein Stichwort aus dem Titel und den Autor angibt.

Alexander
alexander_ro
Benutzer
 
Beiträge: 82
Registriert: So 12. Nov 2006, 13:29

Beitragvon akretschmer » Fr 5. Okt 2007, 14:04

alexander_ro hat geschrieben:Ich habe in zwei Tabellen in der einen sind Titel und der anderen Autoren gespeichert. Es sind immer mehrere Einträge pro Produkt möglich z.B Title, Untertitel oder Titel älterer Auflagen. Autoren kann es natürlich auch mehrere pro Produkt geben.

Meine Suchfunktion soll dann nach Stichwort die Treffer in den Spalten Titel und Autor liefern und als eine Ergenismenge nach der Product-Sprache sortieren. Auserdem müssen doppelte die gefunden wurden weil zum Beispiel der Autor im Titel vorkommt elimeniert werden.

Was ich vermeiden möchte ist dass (wie bei amazon zum Beispiel) die Suche nichts mehr findet wenn man ein Stichwort aus dem Titel und den Autor angibt.

Alexander


Dann machst Du 2 Abgfragen, welche via UNION die Ergebnissmengen vereint. Also etwa:

select autor from autoren_table where produkt_id = 4711 as treffer union all select titel from titel_table where produkt_id = 4711 order by treffer;

Das real anzupassen überlasse ich Dir
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5936
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon alexander_ro » Fr 5. Okt 2007, 14:25

Ja, Union da is was dran, das mit dem anpassen sollte ich schon hinbekommen.

Danke für die schnelle Hilfe.

Alexander
alexander_ro
Benutzer
 
Beiträge: 82
Registriert: So 12. Nov 2006, 13:29

Beitragvon alexander_ro » Mo 8. Okt 2007, 14:05

Ich dachte zuerst die Idee mit Union ist gut hab aber leider was wichtiges übersehen. Ein union über zwei Suchbegriffe in verschiedenen Tabellen ist für das Ergebnis eine "oder" Verknüpfung. Brauchen würde ich aber eine "und" Verknüpfung.

Es wäre schon sinnvoll einen Volltextindex über beide Tabellen zu haben dann wäre es auch möglich die logischen Verknüpfungen zwischen den einzelnen Suchbegriffen nach belieben zu setzten. Auserdem muß noch die Beziehung zwischen den richtigen Datensätzen hergestellt werden. Also beim Suchen müssen die richtigen Autoren zum Titel berücksichtigt werden nicht einfach alle. Dieser Zusammenhang hat nämlich entscheidenden Einfluß auf das Suchergebnis.

Alexander
alexander_ro
Benutzer
 
Beiträge: 82
Registriert: So 12. Nov 2006, 13:29

Beitragvon alexander_ro » Mo 8. Okt 2007, 14:39

Spricht eigentlich irgendwas gegen eine solche konstruktion?

Code: Alles auswählen
select distinct (Title.MyProductNr)
from   ProductTitle Title, ProductContributor Contr
where  Title.MyProductNr = Contr.MyProductNr              and
       Title.idxfti @@ to_tsquery ('default', 'verkauft') and
       Contr.idxfti @@ to_tsquery ('default', 'Lea & Ackermann');


hat zumindest bei meinen ersten Tests gemacht was es sollte.

Alexander
alexander_ro
Benutzer
 
Beiträge: 82
Registriert: So 12. Nov 2006, 13:29


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron