当文本包含字符串“clf”时,我正在使用 fts 并观察到奇怪的行为。出于某种原因,为带有“clf”字符串的文档创建的关键字的行为与使用其他字符串代替“clf”的几乎相同的文档不同。波纹管是重新创建描述行为的代码
CREATE TABLE [dbo].[test1](
[id] [int] NOT NULL,
[data] [nvarchar](max) NULL,
CONSTRAINT [PK_test1] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE FULLTEXT CATALOG test_catalog;
CREATE FULLTEXT INDEX ON [dbo].test1
(
data
)
KEY INDEX [PK_test1] ON test_catalog
insert into dbo.test1 values (1, N'17 12 CLF'), (2, N'17 13 bbb'), (3, N'17 129 CLF'), (4, N'17 139 aaa')
然后当我们查询创建的关键字时
SELECT * FROM sys.dm_fts_index_keywords_by_document( DB_ID('db_name'), OBJECT_ID('dbo.test1') )
我们可以看到为带有“clf”的文档创建的关键字与“aaa”和“bbb”不同。例如,文档 4 有关键字“139”,但文档 3 没有“129”,只有“17 129 clf”。
这种行为的原因是什么?有没有一种简单的方法可以强制 fts 对带有和不带有“clf”的字符串表现出相同的行为?
对技术值使用全文搜索可能具有挑战性。停用词列表和词典语言会影响搜索。
我在我的项目中禁用了停止列表(关闭)并将语言设置为中性。
当您使用“包含”进行搜索并且在单词中使用“*”时,请记住这一点:SQL-Server 只能进行前缀搜索!
请参见此处:https : //technet.microsoft.com/en-us/library/ms187787%28v=sql.105%29.aspx
使用中性语言且没有停止列表,它看起来相同:
文件3:
129
17
17 129
clf
nn129
nn17
nn17129
文件4:
139
17
17 139
aaa
nn139
nn17
nn17139
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句