如何在SQL Server中的多语言内容中实现全文搜索

时间:2013-06-19 06:34:57

标签: 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),
   ........
   ........
)

我们希望在“名称”列中实现全文搜索,因此我们在“名称”列上创建了全文索引。但是在创建全文索引时,我们每列只能选择一种语言。如果我们选择“英语”或“中立”,它不会返回其他语言的预期数据,如日语,中文,法语等。

那么在SQL Server中实现多语言内容的全文搜索的最佳方法是什么?

我们需要创建一个不同的表吗?如果是,那么表格结构是什么(我们需要记住语言不固定,以后可以添加不同的语言)以及搜索查询是什么?

我们正在使用SQL Server 2008 R2。

3 个答案:

答案 0 :(得分:2)

某些内容(文档)类型支持语言设置 - 例如Microsoft Office Documents,PDF,[X] HTML或XML。

如果将Name列的类型更改为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>

在全文索引填充期间,将使用正确的断字符/词干分析器,基于每个值的语言设置(XML文档):名称为1的美国英语,法语或名称2,以及名称3的英语英语。

当然,这需要对数据的管理和使用方式进行重大更改。

ML

答案 1 :(得分:0)

我会担心使用XML而不是NVARCHAR( n )的性能 - 虽然我没有硬性证明。 一种替代方法是使用动态SQL(动态生成特定于语言的代码),并结合Product表上的语言特定索引视图。缺点是缺乏执行计划缓存,即:性能。

答案 2 :(得分:0)

与Matija Lah的回答相同,但这是MS白皮书中提出的建议解决方案。

  
      
  • 当索引内容为二进制类型时(例如Microsoft Word)   文件),iFilter负责处理文本内容   在将其发送到断字符之前可能会遵循特定的语言   二进制文件中的标记。在这种情况下,在索引时间   iFilter为特定文档或调用正确的断字符   以特定语言指定的文档部分。一切你需要的   在这种情况下要做的是在索引后验证多语言   内容已正确索引。 Word,HTML和XML的过滤器   文档内容中的语言规范属性:   
        
    1. 单词 - 语言设置
    2.   
    3. HTML - <meta name=“MS.locale”…>
    4.   
    5. XML -   xml:lang属性
    6.   
  •   
  • 当您的内容是纯文字时,您   可以将其转换为XML数据类型并添加特定的语言标记   表示与该特定文件相对应的语言或   文件部分。请注意,为此工作,在索引之前   必须知道将要使用的语言。
  •   

https://technet.microsoft.com/en-us/library/cc721269%28v=sql.100%29.aspx