mar*_*c_s 10 sql-server full-text-search sql-server-2008
我有一个SQL Server表,我正在尝试理解全文搜索:-)
我在一个表上设置了一个全文目录和一个全文索引Entry,其中包含一个VARCHAR(20)名为的列VPN-ID.
该表中大约有200'000行,并且该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
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用全文启用搜索在该表中查找行.
当我做
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-07')
Run Code Online (Sandbox Code Playgroud)
一切都很好,花花公子,我的行返回.
当我开始使用这样的通配符搜索时:
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-%')
Run Code Online (Sandbox Code Playgroud)
我收到了结果,一切似乎都很好.
但是:当我这样搜索时:
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-36%')
Run Code Online (Sandbox Code Playgroud)
突然间我根本没有得到任何结果.....即使有明显的行匹配搜索条件......
任何想法为什么?? 还有哪些其他"惊喜"全文搜索可供我使用?:-)
更新:创建我使用的全文目录:
CREATE FULLTEXT CATALOG MyCatalog WITH ACCENT_SENSITIVITY = OFF
Run Code Online (Sandbox Code Playgroud)
并且在我的桌子上创建全文索引,我用过
CREATE FULLTEXT INDEX
ON dbo.Entry(list of columns)
KEY INDEX PK_Entry
Run Code Online (Sandbox Code Playgroud)
我尽力避免任何"古怪"的选择.
更新#2:经过一番调查后,似乎SQL Server全文搜索以某种方式将字符串中的破折号解释为分隔符....
虽然此查询不返回任何内容
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, '"VPN-000-362*"')
Run Code Online (Sandbox Code Playgroud)
这一个(在破折号上拆分搜索词):
SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, ' "VPN" AND "000" AND "362*"')
Run Code Online (Sandbox Code Playgroud)
好的 - 似乎有点奇怪,破折号似乎导致分裂,不知何故不起作用.....
其中Language for Word Breaker您使用?你试过Neutral吗?

编辑:
你应该使用adition WHERE CONTAINS([Column], '"text*"').有关前缀搜索的更多信息,请参阅MSDN:
C.使用CONTAINS
以下示例返回名称列中至少有一个以前缀链开头的单词的所有产品名称.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12882 次 |
| 最近记录: |