如何在SQLServer中实现多语言内容的全文搜索
我们有一个支持不同语言的网站。我们有数以百万计的数据,因此在搜索中,我们希望实现SQL Server全文搜索 我们目前的表结构如下所示如何在SQLServer中实现多语言内容的全文搜索,sql,sql-server,sql-server-2008,tsql,c#-4.0,Sql,Sql Server,Sql Server 2008,Tsql,C# 4.0,我们有一个支持不同语言的网站。我们有数以百万计的数据,因此在搜索中,我们希望实现SQL Server全文搜索 我们目前的表结构如下所示 CREATE TABLE Product ( ID INT IDENTITY(1,1), Code VARCHAR(50), ........ ........ ) CREATE TABLE ProductLanguage ( ID INT, LanguageID INT, Name NVARCHAR(200),
CREATE TABLE Product
(
ID INT IDENTITY(1,1),
Code VARCHAR(50),
........
........
)
CREATE TABLE ProductLanguage
(
ID INT,
LanguageID INT,
Name NVARCHAR(200),
........
........
)
我们希望在“Name”列中实现全文搜索,因此我们在Name列上创建了全文索引。但在创建全文索引时,我们只能为每列选择一种语言。如果我们选择“English”或“Neutral”,则不会返回其他语言(如日语、汉语、法语等)的预期数据
那么,在SQLServer中实现多语言内容全文搜索的最佳方法是什么呢
我们需要创建一个不同的表吗。如果是,那么什么是表结构(我们需要记住,语言不是固定的,以后可以添加不同的语言)以及什么是搜索查询
我们正在使用SQL Server 2008 R2。某些内容(文档)类型支持语言设置,例如Microsoft Office文档、PDF、[X]HTML或XML
如果将名称列的类型更改为XML,则可以确定每个值的语言(即每行)。例如:
而不是将值存储为字符串
name 1
name 2
name 3
…您可以使用适当的语言声明将它们存储为XML文档:
<content xml:lang="en-US">name 1</content>
<content xml:lang="fr-FR">name 2</content>
<content xml:lang="en-UK">name 3</content>
name 1
名称2
名字3
在全文索引填充期间,将根据每个值(XML文档)的语言设置使用正确的分词器/词干分析器:名称1为美式英语,名称2为法语,名称3为英式英语
当然,这需要对数据的管理和使用方式进行重大更改
ML我会担心使用XML而不是NVARCHAR(n)的性能——尽管我没有确凿的证据。
一种替代方法是使用动态SQL(动态生成特定于语言的代码),并结合产品表上特定于语言的索引视图。thsi的缺点是缺乏执行计划缓存,即:性能。与Matija Lah的答案相同,但这是MS白皮书中概述的建议解决方案
- 当索引内容为二进制类型(如Microsoft Word)时 文档),负责处理文本内容的iFilter 在发送给分词器之前,可能会使用特定的语言 二进制文件中的标记。在这种情况下,在索引时 iFilter为特定文档或文档调用正确的分词器 用特定语言指定的文档的一部分。你需要的一切 在这种情况下,要做的是在索引后验证多语言 内容索引正确。Word、HTML和XML的过滤器 文档在文档内容中遵循语言规范属性:
- Word–语言设置
- HTML-
- XML-
属性xml:lang
- 当您的内容是纯文本时,您可以 可以将其转换为XML数据类型,并将特定的语言标记添加到 指明与该特定文档或文档相对应的语言 文件部分。请注意,为了使其工作,在索引之前 必须知道将要使用的语言
即使这不是改变的时候,将来你也应该考虑使用像Lucene,ErructScript,Xapian这样的真正的搜索引擎。根据我的经验,对数据库进行全文搜索会导致客户越来越多的人为要求,而这些要求并没有建立数据库。请参阅Matija Lah-它是否会覆盖现有的语言设置(我在列上创建全文索引时选择的语言设置)?