【问题标题】:Need help with Sql Server 2008 and Full Text Searching在 Sql Server 2008 和全文搜索方面需要帮助
【发布时间】:2009-06-02 19:07:46
【问题描述】:

我已经在单个表中的单个字段上设置了 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*?就像..数字被忽略了?

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

嗯。我很混乱。有人有什么建议吗?

【问题讨论】:

  • 我认为你转换后的字符串应该是 "1*" AND "ave*" -- 缺少 "1*" 上的结束符
  • 正确。好眼力。固定。

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


【解决方案1】:

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

【讨论】:

  • 是的,邮政编码中有.. :(我的蹩脚问题。appologies。
【解决方案2】:

全文索引会找到单词的派生词——比如如果你搜索 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 开发版上运行此程序)。根据这些结果(没有找到以 2 开头的内容) - 我会仔细检查您的查询。也许发布整个查询的全文,包括设置搜索变量的位置。

【讨论】:

  • 一旦您使用通配符 (*),全文搜索将停止使用同义词替换。
  • 是的,我很确定情况也是如此。在我重新阅读一遍之后 - 看起来原始查询在 1* 之后缺少引号。
  • 我认为,由于 StopWords,第一个结果丢失了。尝试关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2017-06-07
  • 1970-01-01
  • 2012-06-18
  • 2011-06-10
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多