Jump to content

Frage zu Volltextsuche auf Views/Tabellen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...