【问题标题】:MS SQL : Full Text Search Results are not relevantMS SQL:全文搜索结果不相关
【发布时间】:2013-10-24 04:54:19
【问题描述】:

我正在单列上尝试 MS SQL 全文查询。

为此,我使用“FREETEXTABLE”功能。

当我查询“骑马”时,结果集包含标题包含“骑”字样的视频。

难怪在使用 FREE 或“FREETEXTTABLE”时,会破坏查询字符串
成词,创建屈折词,这就是结果集的生成方式。

所以我的问题是,如果这是过程,为什么结果集没有“马”字所在的视频
存在(我在数据库中有视频,其中视频标题包含“马”字)。

是不是因为分词器偏爱“动词”?

请评论“分词器”和“词干”在英语中的作用。

我可以找到有关“分词器”和“词干”的详细信息的链接也将是 帮助满满。

这对我每次都获得相关结果非常重要。

谢谢。

【问题讨论】:

  • 您应该提供有关您的表/查询/索引的更多信息我倾向于拆分搜索字符串并在每个部分上使用formsof(inflectional,...(结合OR)。见stackoverflow.com/a/4727055/1236044 我也使用containstable( 能够通过Ranking desc 对结果进行排序
  • Bellow 是我的 FTS 查询 CREATE PROC [dbo].[USP_Videos_SearchVideos] @searcher varchar(2000) AS SELECT Ranker.RANK, v.ViewCount, v.ID, v.TitleText, v.CategoryId, c.Term, FROM mst_Videos AS v INNER JOIN FREETEXTTABLE(mst_Videos, TitleText, @searcher) AS Ranker ON v.ID = Ranker.[KEY] INNER JOIN mst_Categories AS c ON v.CategoryId = c.ID WHERE RANKER.RANK >= 100 ORDER BY Ranker.RANK DESC, v.ViewCount DESC 您能否建议对上述查询进行任何修改以使其更好,从而获得越来越多的相关结果。
  • 或者,如果可能的话,请给我提供链接,我可以在其中找到有关分词器和词干分析器的更多详细信息,谢谢!

标签: sql-server full-text-search


【解决方案1】:

全文搜索过滤干扰词和标点符号,您可以灵活地将更多干扰词添加到干扰词的默认列表中。但是要操纵动词、屈折变化或同义词,我们可以在 where 子句中使用不同的功能。
在您的情况下,如果您正在寻找存在“Horse”和“ride”一词的字段,您可以简单地使用 Contains 函数,就像这样......

SELECT ColumnName
FROM TableName
WHERE Contains(ColumnName, '"horse" AND "ride"') 

如果您正在寻找包含“Horse”一词的值,并且“ride”的任何屈折形式都表示骑行,骑行。你可以使用这样的东西......

SELECT ColumnName
FROM TableName
WHERE Contains(ColumnName, '"horse"') AND CONTAINS(ColumnName, 'FORMSOF(INFLECTIONAL, ride)')

【讨论】:

  • 如果我们使用 Contains ,它将提供找到查询词的所有视频,这样结果将不相关,因为当搜索“骑马”时,结果应该包含视频内容骑马,如果数据库中没有此类视频,则在使用“FreetextTabel”时可能会显示“马”和“骑”字的视频。但是这里它没有显示与马相关的视频,尽管它显示了与骑行相关的视频。所以我的问题是 steemer 如何在 FTS 中工作?
猜你喜欢
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
相关资源
最近更新 更多