2009-06-02 98 views
0

我已经在单个表中的单个字段上设置了FTS。需要Sql Server 2008和全文搜索帮助

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*?它的数字被忽略了吗?

另外 - 这一点很重要 - 我已经删除了对停止列表的引用并重建目录。

嗯。我很困惑。任何人有任何建议?

+1

我认为您的转换后的字符串应为 “1 *”和“ave *” - 缺少关闭“上的”1 * – Tetraneutron 2009-06-02 01:50:35

+0

正确。发现得好。固定。 – 2009-06-02 11:07:38

回答

0

“1”可以发生在全文搜索索引列中的任何地方,它不必直接在“Ave”之前(或甚至在此之前),在那一行的其他地方是否有1?

+0

是的,在..邮编:(从我的跛问题。appologies。 – 2009-06-02 12:07:28

0

全文索引将找到的话derivitaves - 就像如果你搜索来看,它可能会觉得跑步,跑步,运行等

不知其决定是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开头的任何内容) - 我会仔细检查您的查询。也许发布整个查询的全文,包括搜索变量的设置位置。