带有“CLF”的文档的奇怪关键字

abc667

当文本包含字符串“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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章