采取此查询:
SELECT * FROM Books
WHERE CONTAINS(([Description], ReverseDescription), '"øgle"')
这两列的文字正在搜索:
为什么那个匹配?我不能在这两个文本中找到完全匹配。据我所知,如果我使用以下查询,则只显示部分匹配:
SELECT * FROM Books
WHERE CONTAINS(([Description], ReverseDescription), '"øgle*"')
任何人都知道发生了什么?
答案 0 :(得分:2)
全文适用于选定的语言语法和词汇,而不是LIKE
之类的简单字符比较。每种语言都定义stemmers and word breakers。我不能说天气øgle
本身就是一个完整的单词,你的FT指数如何处理ø
。我怀疑你的索引不是用丹麦语规则创建的。如果您的索引确实使用了正确的语言,那么您需要检查该语言使用的词干分析器和断路器规则。
更新
其实我认为更简单。 ""
的存在使搜索字词成为前缀字词,没有*
的事件。 MSDN在这里有点含糊不清,因为例如在Performing Prefix Searches中它指出:
当前缀术语是短语时,构成短语的每个标记都被视为单独的前缀术语。将返回包含以前缀术语开头的单词的所有行。例如,前缀术语"轻面包*"将找到文字为"光线包裹的行," "轻微面包屑,"或者"轻面包",但不会返回"轻微烤面包"。
请注意示例中的light
如何是前缀,不需要light*
。我没有要测试的系统,所以我的方面有点猜测,但我怀疑CONTAINS
会将"øgle"
视为不区分大小写的前缀搜索,然后您的文本包含两个匹配{ {1}}和Øgledronning
。
答案 1 :(得分:0)
更改 COLLATE Latin1_General_CS_AS
例如查询将看起来像
SELECT * FROM Books
WHERE CONTAINS(([Description], ReverseDescription), '"øgle*"')
AND [Description] COLLATE Latin1_General_CS_AS LIKE '%"øgle*"%'