我使用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
的邻近搜索功能。
答案 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将会更新。
更新:问题已解决,因为无法修复。