需要有关Sql Server 2008和全文搜索的帮助

时间:2009-06-02 01:17:31

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

我在一个表中的单个字段上设置了一个FTS。

Field: Name NVARHCHAR(350) NOT NULL

现在,当我搜索以下

1 ave
10 ave

我没有收到我期望的结果。

首先,搜索查询1 ave转换为"1*" AND "ave*"。现在我运行我的CONTAINS(..)查询......

SELECT FooId, Name
FROM [dbo].[Names] 
WHERE CONTAINS(Name, @SearchQuery)

然后,连同正确的结果,我也得到了这些不正确的结果......

2 Ave  (a couple of entries .. but they are all unique entires).

那么,这是如何被检索的?那段文字中没有1*?它就像..号码被忽略了?

此外 - 这很重要 - 我删除了对停止列表的引用并重建了目录。

嗯。我很困惑。有人有什么建议吗?

2 个答案:

答案 0 :(得分:0)

“1”可以出现在全文搜索索引列中的任何位置,它不必直接在“Ave”之前(或甚至之前),该行中的其他地方是否有1个?

答案 1 :(得分:0)

全文索引会找到单词的派生词 - 就像搜索RUN一样,它可能会找到RUNNING,RAN,RUN等。

我想知道它是否决定2接近1,并将其作为近似匹配返回。您应该尝试将查询切换到CONTAINSTABLE查询,以便您还可以评估RANK以确定哪个答案更接近匹配。然后,您可以决定阈值并过滤掉任何不符合条件的行,以确定它们的匹配程度。

编辑:它没有做变形思维1接近2.我在样本表上运行了一个测试查询,看起来像这样......

PK          Name
1           1 ave
2           10 ave
3           2 ave
4           12 avenue
5           13 avenue
6           100 ave.
7           200 ave
8           210 avenue

这是我跑的查询...

select  *
from    Table_1
where   contains(name, '"1*" and "ave*"')

这是我得到的结果......

PK          Name
2           10 ave
4           12 avenue
5           13 avenue
6           100 ave.

这里有趣的是找不到表中的第一条记录。 (我在SQL 2008 Dev版上运行了这个)。基于这些结果(没有找到以2开头的内容) - 我会仔细检查您的查询。也许发布整个查询的全文,包括搜索变量的设置位置。