在SQL Server中的多语言内容中进行文本搜索

我们有一个支持不同语言的网站。 我们有数以百万计的数据,因此在搜索中我们想要实现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。


某些内容(文档)类型支持语言设置 - 例如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>

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

当然,这需要您的数据管理和使用方式发生重大变化。

ML


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


与Matija Lah的回答一样,但这是MS白皮书中概述的建议解决方案。

  • 当索引内容是二进制类型(如Microsoft Word文档)时,负责处理文本内容的iFilter在将其发送到分词系统之前可能会遵守二进制文件中的特定语言标记。 在这种情况下,在编制索引时,iFilter为特定文档或以特定语言指定的文档部分调用正确的分词符。 在这种情况下,您需要做的就是在索引后验证多语言内容是否已正确编制索引。 用于Word,HTML和XML文档的过滤器可以承认文档内容中的语言规范属性:
  • 单词 - 语言设置
  • HTML - <meta name=“MS.locale”…>
  • XML - xml:lang属性
  • 当您的内容为纯文本时,可以将其转换为XML数据类型并添加特定的语言标记以指示与该特定文档或文档部分对应的语言。 请注意,为此,在索引之前,您必须知道将使用的语言。
  • https://technet.microsoft.com/en-us/library/cc721269%28v=sql.100%29.aspx

    链接地址: http://www.djcxy.com/p/66851.html

    上一篇: Text search in multilingual content in SQL Server

    下一篇: SQL Server 2008 Full text search on a table with a composite primary key