Elharter 11 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Mhm...bin gerade dabei meine erste Volltextsuche einzurichten. Folgende Frage habe ich mir gerade gestellt. Zur Einführung und leichterem Verständnis: Stellt euch einfach vor ich hätte einen klassischen Posteingang als GMX. FuerUser, vonUser, Betreff, BodyText, Datum. Das ganze liegt in der Tabelle MessagesInBox. Ich habe in diser MessagesInBox sämtliche Daten in Rohform, was soviel bedeutet wie: Spalte Absender=int und beinhaltet die UserID des registrierten User der die nachricht abgeschickt hat. Das selbe gilt für die vonUser Spalte (int). Jetzt habe ich mir für die endgültige Ausgabe eine View gebastelt wo ich sämtliche DInge zusammenstoppel. Ich hole mir die Benutzernamen zusammen, lese Onlinestatus aus, usw... Endgültig besitze ich nun eine superfunktionieren View, die mir alle Daten in einem ansprechenden Ergebnis liefert. Und jetzt zur eigentlichen Frage: Muss ich nun diese Volltext-Geschichte auf der eigentlichen Tabelle einrichten? Oder muss ich dies auf der View tun? Aufgrund dessen, dass ich sämtliche Abfragen am Ende über die View mache erscheint mir eine Einrichtung der Volltextsuche auf der Rohtabelle nicht ganz logisch, da ich eine Volltextabfrage ja auch auf selbige Tabelle tun muss. zb: SELECT betreff, BodyText FROM MessagesInBox WHERE CONTAINS (BodyText, ' "besprechung*" ' ); Bitte um Hilfe. Danke im vorraus. lg mike Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Moin, die Volltextsuche im SQL Server ist eine zum "normalen" SQL separate Funktion. Sie arbeitet auch mit eigenen Abfragefunktionen, weil sie nicht die Tabelle selbst befragt, sondern den separaten Index. Full-Text Search (SQL Server) SQL Server Full Text Search - Wikipedia, the free encyclopedia Den Volltextkatalog kannst du für eine Tabelle (Normalfall) oder für eine Indexed View (Ausnahmefall) erzeugen. (Oder natürlich für mehrere.) Eine normale View hat ja selbst keine Daten, sondern sie ist vereinfacht gesagt eine gespeicherte Abfrage. Die Volltext-Abfrage kann sich dann auf die Tabelle selbst oder auf eine View beziehen, die sich von der Tabelle ableitet. Die Zuordnung macht der Query Optimizer schon selbst. Gruß, Nils Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 Nun gut, was Volltext ist...das es ne seperate Funktion ist hab ich schon mitbekommen - habe inzwischen auch viel gelesen darüber. Grundlegend ist mir auch bewusst das Sie den Volltextkatalog befragt. Während ich auf Antworten hier gewartet habe, bin ich natürlich nicht tatlos herumgesessen sondern hab versucht die Lösung zu finden. Deshalb hab ich mal einfach probiert dieses Volltextsuche für meine MEssageInbox einzurichten und abzufragen -> hat funktioniert. Sobald ich die das selbe jedoch über die View machen will geht dies nicht mehr. Fehler: Msg 7601, Level 16, State 2, Line 1 Cannot use a CONTAINS or FREETEXT predicate on table or indexed view 'MessagesInbox' because it is not full-text indexed. Nächster Schritt war also die View soweit zu bringen das sie Volltext indiziert ist. Gut gesagt getan, gleich das 1te Problem: Cannot create index on view because the view is not schema bound. Lösung dazu habe ich hier gefunden: SQL Server Schema Binding and Indexed Views Einfach die View mit einem Schemabind anlegen. Hat auch funktioniert. Nächster Schritt wäre also, auch nach Anleitung, einen Clustered-Unique-Index zu erstellen. Aber hier hänge ich derzeit. Fehlermeldung: cannot create index on view it contains text, ntext, image or xml colums. Error: 1942 Versteh ich nicht, denn die gewählte Spalte ist eine INT-Spalte mit den ID´s der Usertabelle. Zitieren Link zu diesem Kommentar
Daniel.Kehrer 10 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Fehlermeldung: cannot create index on view it contains text, ntext, image or xml colums. Error: 1942 Welche Spalten hast du zum Volltextindex hinzugefügt? Der Volltextindex funtioniert mit den in der Meldung aufgeführten Datentypen nicht. Du musst die nvarchar (Unicode) oder den varchar Datentyp verwenden. lg Daniel Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 Welche Spalten hast du zum Volltextindex hinzugefügt?Der Volltextindex funtioniert mit den in der Meldung aufgeführten Datentypen nicht. Du musst die nvarchar (Unicode) oder den varchar Datentyp verwenden. lg Daniel Ich glaube ich habe INfos vergessen. Ich habe auf der "neuen" View (die jetzt einen Schemabind besitzt) noch gar kein FulltextIndex angelegt. Warum nicht? Weil ich dazu einen UniqueIndex benötige. Die View besitzt zurzeit noch keinen. Wenn ich nun diesen UniqueIndex anlegen möchte funktioniert das nicht. Beim anlegen verwende ich die Spalte, die mir am wichtigsten erscheint (fuerBenutzerID) und dabei erhalte ich die oben angeführte Fehlermeldung. Zitieren Link zu diesem Kommentar
Daniel.Kehrer 10 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 So ich habs jetzt mal bei mir ausprobiert. Sowie in der Abfrage Felder der oben genannten Typen enthalten sind, kann kein Gruppierter Unique Index erstellt werden, auch wenn diese Felder nicht im Index hinterlegt sind. Du musst diese Felder in die vorhin von mir genannten Datentypen umwandeln. Hier mal ein Link zu der Bedeutung der Datentypen: Was ist eigentlich nVarChar(MAX) lg Daniel Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Moin, nach der Rückfrage bin ich mir jetzt nicht ganz sicher, ob eine View zum Abfragen eines Full Text Index geeignet ist. Wäre mir neu, aber ich habe das auch selten in der Praxis gemacht. Jedenfalls solltest du nicht einfach deine View in eine Indexed View umwandeln, wenn es keinen wirklichen Grund dafür gibt. Das ist nicht einfach eine Funktion, die du einer View hinzufügst, sondern du erzeugst damit erheblichen Daten-Overhead sowohl in der Datenbank (zusätzlicher Index - die Indexed View ist ja gar keine echte View, sondern physisch gesprochen eine Tabelle) als auch im Katalog (es handelt sich um einen neuen Katalog, der separat zu dem der eigentlichen Tabelle steht). Gruß, Nils Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 stimmt ja, ich habe eine ntext spalte.... Habe mir deinen Link durchgelesen. Hab dazu noch etwas nützliches gefunden: NTEXT vs NVARCHAR(MAX) in SQL 2005 Lesen und auf jeden Fall durchführen! (Performance @ LOB/Table Structur) So ich mach mich mal ran :D Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 Moin,nach der Rückfrage bin ich mir jetzt nicht ganz sicher, ob eine View zum Abfragen eines Full Text Index geeignet ist. Wäre mir neu, aber ich habe das auch selten in der Praxis gemacht. Jedenfalls solltest du nicht einfach deine View in eine Indexed View umwandeln, wenn es keinen wirklichen Grund dafür gibt. Das ist nicht einfach eine Funktion, die du einer View hinzufügst, sondern du erzeugst damit erheblichen Daten-Overhead sowohl in der Datenbank (zusätzlicher Index - die Indexed View ist ja gar keine echte View, sondern physisch gesprochen eine Tabelle) als auch im Katalog (es handelt sich um einen neuen Katalog, der separat zu dem der eigentlichen Tabelle steht). Gruß, Nils Gut, ich würde mich auch mit einer andere Möglichkeit zufrieden geben. Bloss, was tun? Ich habe sämtliche Dinge die damit zu tun haben über die Views abgefragt. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Moin, wie wäre es denn, wenn du dich der Sache nicht von den technischen Details her näherst, sondern von den Anforderungen? Sprich: Was willst du denn erreichen? Gruß, Nils Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 Ich möchte in einer bestehenden Produktivumgebung den Benutzern eine Volltextsuche im eigenen Posteingang ermöglichen. Ein User besitzt 5.000 Nachrichten in seiner Inbox und soll nach "die Besprechung vom 10.12.08" suchen können, bzw. auch nach Präfix suchen können. Deshalb hab ich an die Volltext-Suche gedacht. Die derzeitige Ausgabe aller Daten für den User, werden über die View ausgelesen. Die Volltextsuche in der Rohtabelle funktioniert bereits wunderbar. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 17. September 2009 Melden Teilen Geschrieben 17. September 2009 Moin, von was für einem Posteingang reden wir? Warum sollte SQL Server da das Mittel der Wahl sein? Windows Desktop Search, Google Desktop und andere machen das doch viel besser. Gruß, Nils Zitieren Link zu diesem Kommentar
Elharter 11 Geschrieben 17. September 2009 Autor Melden Teilen Geschrieben 17. September 2009 Achso.....argh, ich bin schon zu eingfahren im denken. Ist eine Anwendung die in Classic-ASP/.NET realisiert ist, online/Intranet. Zugriff passiert per SQL OLE DB. Der Posteingang ist somit im für den Benutzer über den Browser zugänglich. Die Volltextsuche möchte ich entsprechend anbieten können. lg Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.