Suche bestimmte Wörter (zB agarte
) mit CONTAINS
für eine Tabelle mit nur einer Zeile und einem Textfeld mit nur einem Wort (zB te
), SQL Server finden diese Zeile als gültiges Ergebnis . (Ich suche nach agarte
und te
ist gültig?)Fremd Flexion Verhalten in SQL Server-Volltextsuche
Ich habe auf zwei verschiedene SQL Server getestet 2008 und anderen SQL Server 2012 auf verschiedenen Servern.
Ich denke, ist mit Flexionsformen verbunden, aber ich kann nicht verstehen, warum und wie dieses Verhalten ändern.
Ein kompletter runnable Test:
SET NOCOUNT ON
GO
SELECT version = @@VERSION
GO
CREATE TABLE foo (k int identity(1,1), f nvarchar(max) not null, CONSTRAINT PK_foo PRIMARY KEY CLUSTERED (k ASC))
GO
INSERT INTO foo (f) VALUES ('te')
GO
CREATE FULLTEXT CATALOG foo_catalog
GO
CREATE FULLTEXT INDEX ON foo(f) KEY INDEX PK_foo ON foo_catalog WITH STOPLIST = OFF
GO
ALTER FULLTEXT CATALOG foo_catalog REBUILD WITH ACCENT_SENSITIVITY = OFF
GO
WAITFOR DELAY '00:00:05'
GO
SELECT COUNT(*) FROM foo WHERE CONTAINS(*, '"agarte"', language 3082) -- 1
SELECT COUNT(*) FROM foo WHERE CONTAINS(*, '"egarte"', language 3082) -- 1
SELECT COUNT(*) FROM foo WHERE CONTAINS(*, '"ogarte"', language 3082) -- 1
SELECT COUNT(*) FROM foo WHERE CONTAINS(*, '"garte"' , language 3082) -- 1
SELECT COUNT(*) FROM foo WHERE CONTAINS(*, '"gurte"' , language 3082) -- 0
GO
DROP FULLTEXT INDEX ON foo
GO
DROP FULLTEXT CATALOG foo_catalog
GO
DROP TABLE foo
GO
Ich werde auf searchs als Abhilfe neutrale Sprache setzen, aber ich mag verstehen, warum und wie dieses Verhalten steuern. Danke!