我在一个表中的单个字段上设置了一个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*
?它就像..号码被忽略了?
此外 - 这很重要 - 我删除了对停止列表的引用并重建了目录。
嗯。我很困惑。有人有什么建议吗?
答案 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开头的内容) - 我会仔细检查您的查询。也许发布整个查询的全文,包括搜索变量的设置位置。