【问题标题】:Full-text search does not find some prefixes全文搜索未找到某些前缀
【发布时间】:2014-11-18 15:00:21
【问题描述】:

我正在使用 SQL Server 2014 的全文搜索功能在数据库中查找以给定前缀开头的文档。但是,有些查询不会产生任何结果,但它们应该会产生任何结果。

举个例子:

SELECT * FROM [Profile].[DocumentView] WHERE CONTAINS(Content, '"Friedenseins*"')

(24 row(s) affected)

SELECT * FROM [Profile].[DocumentView] WHERE CONTAINS(Content, '"Friedensein*"')

(0 row(s) affected)

SELECT * FROM [Profile].[DocumentView] WHERE CONTAINS(Content, '"Friedensei*"')

(29 row(s) affected)

我了解第一个和第三个结果,但不了解第二个结果。全文索引的停止列表已关闭。分词器的语言设置为德语。

编辑:
使用FREETEXT 的建议不是针对这种特殊情况的解决方案,因为我需要CONTAINS 的邻近搜索功能。

【问题讨论】:

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


【解决方案1】:

感谢您发布此问题 Mathias。我只是想指出微软的建议(通过https://connect.microsoft.com/SQLServer/feedback/details/1032815)是切换到格式

 SELECT * FROM [Profile].[DocumentView] WHERE FREETEXT(Content, '"Friedensein*"')

虽然这对 Mathias 没有帮助,但它能够帮助我并可能帮助读者。

就我而言,我在搜索存储在文本字段 (nvarchar) 中的日期字符串时遇到了问题。我的简单示例是这不起作用:

select * from Sample
where CONTAINS(*, '"1/5/2015*"')

... 什么都不返回。但是,当我如下切换到 FREETEXT 时,它确实按预期返回。

select * from Sample
where FREETEXT(*, '"1/5/2015*"')

我也在使用 SQL 2014。如果您也遇到此问题,请投票支持 MS Connect 链接。

2015 年 1 月 8 日更新:

我后来发现这个解决方案在我的情况下不起作用,因为 FREETEXT 带回了其他“相似”的日期值,或者看起来如此。以上面 2015 年 1 月 5 日的示例为例,我还在 2015 年 1 月 2 日、2015 年 1 月 6 日等获得回击。事实上,如果我查询 2014 年 12 月 5 日(前一年),我全年都会受到打击,因此在这种情况下,“相似”似乎是由年份定义的。

作为参考,这里是 SQL 文档:http://msdn.microsoft.com/en-us/library/ms176078.aspx

【讨论】:

    【解决方案2】:

    问题在于分词器,它不包含短语 id,因此第二个查询被翻译成(伪 SQL)的等价物

    SELECT * FROM [Profile].[DocumentView] WHERE Content LIKE
        ((friedensein* OR frieden*) in Position 1) AND (sein* in Position 2)
    

    但是“Friedenseinsätze”在位置 2 有“einsätze”。使用正确的短语 id,查询将变为

    SELECT * FROM [Profile].[DocumentView] WHERE Content LIKE
        ((friedensein* in Position 1) OR ((frieden* in Position 1) AND (sein* in Position 2)))
    

    已通知 Office 团队。 Connect Thread 将在有新信息时更新。

    更新:问题已解决为无法修复

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 2012-05-30
      相关资源
      最近更新 更多