WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Volltextsuche - SQL (2000) - über mehrere Tabellen+Spalten... (http://www.wcm.at/forum/showthread.php?t=134095)

renew 12.05.2004 15:33

Volltextsuche - SQL (2000) - über mehrere Tabellen+Spalten...
 
Ich muss das Thema nochmal ansprechen:
Ich möchte eine Volltextsuche für ein CMS implementieren.
System ist: Win2003 mit .NET 1.1 (in ASP.NET wird programmiert) und die DB is auf einem SQL 2000 Server.

Einen Volltextindex anzulegen und dort dann einzelne Tabellen bzw. Spalten anzulegen sollte kein Problem darstellen.

Das Problem ist aber, ich möchte verschiedene Tabellen (die eine Unterschiedliche Struktur haben) mit einem Suchbegriff durchsuchen und dann das Ergebnis in einer Liste ausgeben.

Im konkreten heißt das ich habe:
eine Tabelle für das Menü
eine Tabelle für Downloads
eine Tabelle für div. Artikel/Text

Diese sollen alle durchsucht werden und dann nach relevanz geordnet ausgegeben werden (wobei z.B. ein Treffer bei einem Menüpunkt automatisch höher gewertet wird).

So, hab jetzt schon die Doku und google gequält jedoch noch keine wirklich sinnvolle Lösung gefunden.
Das einzige was mir bis jetzt aeingefallen ist, wären 3 Abfragen die mit Union verknüpft werden (die Relevanz muss ich auch noch irgendwie "mitnehmen" - zum Sortieren) und das ganze dann ausgeben.

Hat jemand noch einen "eleganteren" Lösungsvorschlag?

Ich dank euch schon mal für eure Ideen, mfG LLR

schera 12.05.2004 15:44

SELECT ...
 
hmm...
also vielleicht hilft dir das weiter ...
SELECT mit UNION ALL

was ich so mitbekommen habe solltest du UNION ALL verwenden.

lG,

schera

renew 12.05.2004 15:56

Union All wäre Käse, da ich ja dann evt. doppelte Suchergebnisse bekomme.

Aber umso mehr ich drüber nachdenke (und nachdem ich jetzt auch noch den Artikel gelesen habe) wird mir wohl nix anderes übrig bleiben, als den Index auf die einzelnen Tabellen zu setzen, und dann jede einzelne zu durchsuchen und mit Union zu verknüpfen.

schera 12.05.2004 16:00

... richtig UNION ALL ist nicht gut ;-)
habs auch grad gelesen ...

Find leider auch nichts Vernünftiges ....

käptn 13.05.2004 10:54

Sieh dir das Kapitel im SQL-CHM nochmal genauer an, bei den Beispielen ist zu erkennen, dass es so etwas wie ein Rank Attribut gibt.

~

renew 13.05.2004 12:06

Zitat:

Original geschrieben von käptn
Sieh dir das Kapitel im SQL-CHM nochmal genauer an, bei den Beispielen ist zu erkennen, dass es so etwas wie ein Rank Attribut gibt.

~

das ich das Ranking raus bekomme weiß ich eh - das "Problem" welches ich habe ist, dass in der Tab. Download bzw. Menü die Felder vom Typ varchar sind - und vom Artikel ntext (=viel Text).
Und wenn ich die Abfragen mit Union verknüpfe muss ich evt. die 2 kleinen Textfelder auf ntext aufblasen, damit ich sie zusammenführen kann. (und ich denk nicht, dass das von der Performance so supi is)

Bin leider noch nicht dazu gekommen es ausprobieren, da ich noch einige andere Sachen vorher machen muss. :heul:

käptn 13.05.2004 13:38

Splitte die Abrfage auf drei einzelne (eine pro tabelle) auf, da du ja sowieso eine gewisse Preferenz auf das Ranking pro Tabelle haben willst.

~

renew 13.05.2004 13:43

Zitat:

Original geschrieben von käptn
Splitte die Abrfage auf drei einzelne (eine pro tabelle) auf, da du ja sowieso eine gewisse Preferenz auf das Ranking pro Tabelle haben willst.

~

Das ist richtig - nur bekomme ich ja so 3 getrennte Abfragen --> 3 getrennte Schleifen - ich bekomme sie nicht nach dem insgesamten Ranking geordnet.

Weil es kann ja immer noch sein, dass ein Treffer von Downloads zutreffender ist als vom Menü (auch wenn Menü "stärker" gewichtet wird)

käptn 13.05.2004 17:50

Das kapier ich jetzt nicht, aber bitte :D

~

renew 13.05.2004 18:14

Zitat:

Original geschrieben von käptn
Das kapier ich jetzt nicht, aber bitte :D

~

Ich hab 3 Abfragen - in allen 3 hab ich das Ranking drin (schon mit meiner "gewichtung" verändert).

Wie soll ich nach dem Ranking insgesamt sortieren (also über alle 3 Abfragen hinweg) - ohne die Abfragen mit Union zu verbinden und eben die varchar Werte auf ntext zu ändern?

Das mein ich ;)

renew 17.05.2004 10:52

Vergessts alles was ich geschrieben hab... :rolleyes:

Ich hätte mich vielleicht ein bisserl mehr mit dem ganzen Thema auseinander setzen sollen, bevor ich irgendwas post von dem ich glaub, das ich weiß wie es funkt....

Mit FREETEXTTABLE bzw. CONTAINSTABLE in der Abfrage bekomme ich sowieso nur den Rank und eben den Key (=Primärschlüssel in der Tabelle) zurück.
Die kann ich dann wunderbar mit UNION verknüpfen und nach dem RANK sortieren (und schon den RANK nach meinen Vorstellungen manipulieren und auch ein Zusatzfeld hinzufügen, dass mir sagt ob es aus Menu, Downloads od. Article kommt)

Und im Programmcode zeige hole ich dann erst den eigentlichen Inhalt über den Key aus den einzelnen Tabellen.

Jetzt muss ich mich noch damit spielen, wie ich das ganze am besten anzeige, bzw mit welchen Werten ich den Rank manipuliere und dann passt das scho. :cool:


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag