Laden...

[solved]Volltextsuche zu erstellen (MSSQL2008-Standart)

Erstellt von anakin87 vor 15 Jahren Letzter Beitrag vor 14 Jahren 2.341 Views
A
anakin87 Themenstarter:in
37 Beiträge seit 2009
vor 15 Jahren
[solved]Volltextsuche zu erstellen (MSSQL2008-Standart)

hey,
ich probier schon ewig rum aber krieg keine volltextsuche zustande.
kurz zum szenario:
MS SQL 2008 Standart
Tabelle
Tab_Volltextsuche:
ID (int) (notnull) (PK) (is identity)
Text (text) (null)
..bla
...bla

so und ich würd gerne auf die spalte text1 ne volltextsuche anwenden können
ala

select * from Tab_Volltextsuche where contains([Text], '"name*"')

unter der 2000 db hat alles gefunzt nur die importierung ins 2008er hat sowieso ned
hingehaun und jetzt leg ich mal bei mir lokal (und nicht am db-server) mal aus testzwecken eine neue db + tabelle + testdaten an....

irgendwie hab ich das blöde gefühl das es was mit den unique-identifier zu tun hat der unter dem 2008er verfügbar wurde...

kann wir jemand schritt für schritt zur volltextsuche helfen?
technet und msdn war nicht so sonderlich hilfreich...
weil mich stellts ja schon bei dem da auf


CREATE UNIQUE INDEX ui_testIndex ON Tab_Volltextsuche.ID(ID)

Folgender Fehler...


Meldung 1088, Ebene 16, Status 12, Zeile 1
Das 'Tab_Volltextsuche.ID'-Objekt wurde nicht gefunden, weil es nicht vorhanden ist oder Sie nicht über die entsprechenden Berechtigungen verfügen.

beste grüße

I'll fight till the hell starts frezzing and than I'll fight on ice...

<<Der Geist in deiner CPU.... ist mein Programm>>

1.564 Beiträge seit 2007
vor 14 Jahren

Hi

Dein Problem ist weniger der Volltext-Index. Du hast nur eine ID zuviel in deinem CREATE INDEX.

Dein Code:

CREATE UNIQUE INDEX ui_testIndex ON Tab_Volltextsuche.ID(ID)

Korrekt:

CREATE UNIQUE INDEX ui_testIndex ON Tab_Volltextsuche(ID)

Die Beispiele aus den BOL beziehen sich auf die AdventureWorks und da liegen fast alle Tabellen in Schemata, deine Tabelle liegt aber im DBO Schema. Du musst entweder vor deinen Tabellennamen "dbo." setzen oder du lässt das Schema ganz weg.

Du solltest jedoch statt des UNIQUE INDEX einen "PRIMARY KEY CLUSTERED" auf deine ID setzen. Der Primary Key weil's wahrscheinlich der Primärschlüssel ist und CLUSTERED weil du sonst eine HEAP Tabelle hast und das ist für die Performance nie zuträglich 😉

Das hier sollte funktionieren:


CREATE TABLE TestFullText
(
   Id INT NOT NULL IDENTITY,
   Txt TEXT,
   CONSTRAINT PK_TestFullText
      PRIMARY KEY CLUSTERED
      (Id)
)
GO

INSERT INTO TestFullText
             SELECT 'Sehr langer text'
   UNION ALL SELECT 'Zu kurz'
GO
CREATE FULLTEXT CATALOG ft AS DEFAULT
GO
CREATE FULLTEXT INDEX 
   ON TestFullText(Txt)
   KEY INDEX PK_TestFullText
GO
SELECT
      *
   FROM TestFullText
   WHERE CONTAINS(Txt, '*langer*')
GO
DROP TABLE TestFullText

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

A
anakin87 Themenstarter:in
37 Beiträge seit 2009
vor 14 Jahren

hey,
erstmal danke für deine anführung - hat mir schon etwas klarheit verschaft 👍
leider steh ich vorm nächsten problem

so ich habs jetzt mal so gemacht:


use FullTextIndexDB;
go

create unique index ui_index on source(ID);
create fulltext catalog ftc as default;
create fulltext index on source([text])
key index ui_index 
with stoplist = system;
go

und da hat er mir alles angelegt - keine fehler

aber will ich jetzt mit


select * from source where contains([text],'test');
go
--da soll er 2 von 4 datensätze zurückgeben

ich bekomme aber nur einen Fehler das der


Meldung 30046, Ebene 16, Status 1, zeile 1
SQL Server hat bei der Komunikation mit dem Hostprozess des Volltextfilterdaemons (FDHost) einen Fehler erkannt (0x80070218).
stellen sie sicher, dass der FDHost-Prozess ausgeführt wird. um den FDHost-Prozess neu zu starten, führen sie den sp_fulltext_service-Befehl 'restart_all_fdhosts' aus, oder starten Sie die SQL-Server-Instanz neu.

komischerweise läuft der FullText-FilterDaemonLauncher-Prozess eh auf 'automatisch' und ist auch gestartet
jedenfalls laut SQL-Server Konfiguration-Manager

bin für jede hilfe dankbar!

ich steig nicht mehr durch 🤔

beste grüße

UPDATE:
man muss zu der Gruppe 'SQLServerFDHostUser'
den user hinzufügen der den 'SQL FullTextFilter Daemon Launcher' startet
dann is mal dieses Problem weg....
nun zum nächsten
die volltext-suche liefert keine ergebnisse obwohl die testfälle es sicherstellen sollten
meine vermutung index ist leer bzw es muss die indizierung erst stattfinden
aber wie???

UPDATE2:
ok durch die probleme mit dem FDHost-Prozess funlktionieren die angelegten indizes nicht richtig die müssen neu erstellt werden siehe oben in diesem beitrag

eine Anmerkung noch will man wildcards verwenden dann so:


use VoltextSucheDB;
go
select * from Tab_Voltextsuche where contains([text],'"Test*"');
go

I'll fight till the hell starts frezzing and than I'll fight on ice...

<<Der Geist in deiner CPU.... ist mein Programm>>