2016-05-24 2 views
0

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!

Antwort

1

Das Problem sieht der wordbraker

zu sein, wenn wir

laufen
SELECT * FROM sys.dm_fts_parser (' "ugarte" ', 3082, 0, 0) 

keyword     group_id phrase_id occurrence special_term display_term expansion_type source_term 
-------------------------- -------- --------- ---------- ------------ ------------ -------------- ----------- 
0x0075006700610072   1  0   1   Exact Match ugar   0    ugarte 
0x00740065     1  0   1   Noise Word te   0    ugarte 
0x007500670061007200740065 1  0   1   Exact Match ugarte  0    ugarte 

mit ogorte und andere nicht auftreten bekommen.

Ohne bis IFilter sieht nicht möglich vermeiden Sie das Wort zu brechen.

Verwandte Informationen:

Verwandte Themen