SQL Server全文搜索未找到我的行

时间:2011-04-18 07:04:03

标签: sql-server sql-server-2008 full-text-search

我有一个SQL Server表,我正在尝试理解全文搜索: - )

我在表Entry上设置了全文目录和全文索引,其中包含名为VARCHAR(20)的{​​{1}}列。

该表中大约有200'000行,VPN-ID列的值如下:

VPN-ID

现在我正在尝试使用全文启用搜索来查找该表中的行。

当我这样做时

VPN-000-359-90
VPN-000-363-85
VPN-000-362-07
VPN-000-362-91
VPN-000-355-55
VPN-000-368-36
VPN-000-356-90

一切都很好,花花公子,我的行也会被退回。

当我开始使用这样的通配符搜索时:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-07')

我得到了结果,一切似乎都很好。

HOWEVER:当我这样搜索时:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-%')

突然间我根本没有得到任何结果.....即使明显行符合该搜索条件......

任何想法为什么?还有哪些其他“惊喜”全文搜索可供我使用? : - )

更新:创建我使用的全文目录:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-36%')

并在我的桌子上创建全文索引,我使用

CREATE FULLTEXT CATALOG MyCatalog WITH ACCENT_SENSITIVITY = OFF

我尽力避免任何“古怪”选项。

经过一番调查后,

更新#2:,似乎SQL Server全文搜索以某种方式将字符串中的破折号解释为分隔符....

虽然此查询不返回任何内容:

CREATE FULLTEXT INDEX 
ON dbo.Entry(list of columns)
KEY INDEX PK_Entry

这一个(在破折号上拆分搜索词):

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, '"VPN-000-362*"')
好的 - 似乎有点奇怪,破折号似乎导致分裂,不知何故不起作用.....

2 个答案:

答案 0 :(得分:6)

你使用Language for Word Breaker吗?你试过Neutral吗?

enter image description here

编辑:
在adition中你应该使用WHERE CONTAINS([Column], '"text*"')。有关MSDN的详细信息,请参阅Prefix Searches

  

℃。使用CONTAINS和

     

以下示例返回all   产品名称至少包含一个单词   从中的前缀链开始   名称栏。

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO

btw ...类似问题herehere

答案 1 :(得分:2)

只是想知道,但你为什么不这样做:

SELECT (list of columns)
FROM dbo.Entry
WHERE [VPN-ID] LIKE 'VPN-000-36%'

在我看来,全文搜索不适合这项工作。只需在该列上使用普通索引。