【问题标题】:What will happen in SQL Server if a fulltext search is done using fulltext index defined for other language如果使用为其他语言定义的全文索引完成全文搜索,SQL Server 会发生什么
【发布时间】:2016-03-26 15:13:58
【问题描述】:
我是 SQL Server 全文搜索的新手。
我有一个表,其中标题为 description 的列的类型为 ntext,它可以包含任何语言的数据。
现在我要实现全文搜索,在谷歌上搜索了一下,我发现目前对多语言使用相同的索引并不是一个简单的选择。
我想知道如果我在数据库中使用代码 1033 创建英语全文索引,然后使用相同的索引使用非英语字符串进行搜索,并且某些记录中包含非英语数据,会发生什么情况。
它会完全失败还是会返回一些数据。具体会是什么行为?
【问题讨论】:
-
ntext、text 和 image 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)、varchar(max) 和varbinary(max)。 See details here
-
标签:
sql-server
full-text-search
full-text-indexing
fulltext-index
full-text-catalog
【解决方案1】:
它不会完全失败,但您会在某些搜索中出现不受欢迎的行为。以下是我能想到的你会遇到问题的领域,虽然它可能不是一个完整的列表。
- 索引中的单词将根据英文规则进行拆分。 (例如:
dog-catcher 被拆分以便可以匹配,您可以在 dog 或 catcher 上搜索。但 dog's 被视为 1 个单词,不会匹配 dog。)我确定有这些规则不同或某些标点符号扮演不同角色的其他语言,因此不会按预期将单词分开。
- 如果您使用的是英语停用词表,任何与普通英语单词拼写相同的非英语单词(例如:is、at、as、can)都将从您的索引中删除。
- 您将无法使用
FREETEXT/FREETEXTTABLE 或FORMSOF,因为它们将使用英语同义词和英语屈折形式。
- 使用
NEAR 时,确定字距的规则可能会有所不同。
- 搜索引用的短语(例如:
CONTAINS(*, '"planet earth"'))可能会产生不可预知的结果。全文引擎将应用英语语言规则来解析单词以及如何处理标点符号。例如,在英文索引中搜索"a. lincoln" 时,解析器会认为a. 是句子的结尾,因此可能与索引中的文本a lincoln 不匹配。如果您使用的语言对句子的结束方式或句点如何与缩写一起使用有不同的规则,那么您可能会遇到问题。 (这只是一个例子。可能还有更多潜在问题。)
- 对数字的搜索可能会产生不可预知的结果。例如,在英语中,您可以在大量数字中使用逗号分隔符(例如:
1,234,567),全文将与 1234567 匹配,反之亦然。如果您使用的语言具有不同的数字格式规则,那么您可能会遇到问题。
您最好使用中性语言而不使用停止列表。