如果使用为其他语言定义的全文索引完成全文搜索,SQL 服务器会发生什么
What will happen in SQL Server if a fulltext search is done using fulltext index defined for other language
我是 SQL 服务器全文搜索的新手。
我有一个 table,其中标题为 description 的列的类型为 ntext
,它可以包含任何语言的数据。
现在我打算实现全文搜索,并且在谷歌上搜索了一下,我发现目前对多语言使用相同的索引并不是一个简单的选择。
我想知道如果我在数据库中使用代码 1033 创建英文全文索引,然后使用相同的索引使用 non-english 字符串进行搜索,如果某些记录有 non-english 数据,会发生什么情况在他们里面。
它会完全失败还是会 return 一些数据。具体的行为是什么?
它不会完全失败,但您会在某些搜索中遇到不需要的行为。以下是我能想到的您会 运行 遇到问题的区域,尽管它可能不是完整列表。
- 索引中的单词将根据英文规则拆分。 (例如:
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
匹配,反之亦然。如果您正在处理一种具有不同数字格式规则的语言,那么您可能 运行 会遇到问题。
您最好使用没有停用词列表的中性语言。
我是 SQL 服务器全文搜索的新手。
我有一个 table,其中标题为 description 的列的类型为 ntext
,它可以包含任何语言的数据。
现在我打算实现全文搜索,并且在谷歌上搜索了一下,我发现目前对多语言使用相同的索引并不是一个简单的选择。
我想知道如果我在数据库中使用代码 1033 创建英文全文索引,然后使用相同的索引使用 non-english 字符串进行搜索,如果某些记录有 non-english 数据,会发生什么情况在他们里面。
它会完全失败还是会 return 一些数据。具体的行为是什么?
它不会完全失败,但您会在某些搜索中遇到不需要的行为。以下是我能想到的您会 运行 遇到问题的区域,尽管它可能不是完整列表。
- 索引中的单词将根据英文规则拆分。 (例如:
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
匹配,反之亦然。如果您正在处理一种具有不同数字格式规则的语言,那么您可能 运行 会遇到问题。
您最好使用没有停用词列表的中性语言。