我是 SQL Server 全文搜索的新手。
我有一个表,其中标题为 description 的列具有类型ntext
,它可以包含任何语言的数据。
现在我打算实现全文搜索并在谷歌上搜索了一下,我发现目前对多语言使用相同的索引并不是一个简单的选择。
我想知道如果我使用数据库中的代码 1033 创建英语全文索引,而不是使用相同的索引使用非英语字符串进行搜索,并且某些记录中包含非英语数据,会发生什么情况。
它会完全失败还是会返回一些数据。究竟会是什么行为?
我是 SQL Server 全文搜索的新手。
我有一个表,其中标题为 description 的列具有类型ntext
,它可以包含任何语言的数据。
现在我打算实现全文搜索并在谷歌上搜索了一下,我发现目前对多语言使用相同的索引并不是一个简单的选择。
我想知道如果我使用数据库中的代码 1033 创建英语全文索引,而不是使用相同的索引使用非英语字符串进行搜索,并且某些记录中包含非英语数据,会发生什么情况。
它会完全失败还是会返回一些数据。究竟会是什么行为?
它不会完全失败,但您会在某些搜索中出现不需要的行为。以下是我能想到的你会遇到问题的领域,尽管它可能不是一个完整的列表。
dog-catcher
被拆分以便可以匹配您可以在dog
or上搜索catcher
。但dog's
被视为 1 个单词并且不会匹配dog
。)我敢肯定还有其他语言的这些规则不同或某些标点符号播放一个不同的角色,因此单词不会像预期的那样被分解。FREETEXT
/FREETEXTTABLE
或FORMSOF
因为他们将使用英语同义词和英语屈折形式。NEAR
,确定单词距离的规则可能会有所不同。CONTAINS(*, '"planet earth"')
可能会产生不可预知的结果。全文引擎将应用英语语言规则来解析单词以及如何处理标点符号。例如,在"a. lincoln"
英文索引中搜索时,解析器会认为这a.
是一个句子的结尾,因此可能与a lincoln
索引中的文本不匹配。如果您使用的语言对句子的结束方式或句点如何与缩写一起使用有不同的规则,那么您可能会遇到问题。(这只是一个例子。可能还有更多潜在问题。)1,234,567
,全文将与此匹配,1234567
反之亦然。如果您正在处理具有不同数字格式规则的语言,那么您可能会遇到问题。您最好使用没有停止列表的中性语言。