全文搜索没有找到一些前缀

时间:2014-11-18 15:00:21

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

我使用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的邻近搜索功能。

2 个答案:

答案 0 :(得分:2)

感谢您发布此问题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月1日,2015年1月6日回复点击等等。事实上,如果我查询2014年12月5日(前一年)我全年都会受到点击,所以在这种情况下,“类似”似乎是由年份来定义的。

供参考,以下是SQL文档:http://msdn.microsoft.com/en-us/library/ms176078.aspx

答案 1 :(得分:1)

问题在于断字符,它不包含短语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)))

办事处小组已获悉。当有新信息时,Connect Thread将会更新。

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