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>>
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ß.
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>>