6

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

4

3 回答 3

2

某些内容(文档)类型支持语言设置 - 例如 Microsoft Office 文档、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 为英国英语。

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

机器学习

于 2013-06-26T14:32:14.787 回答
0

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

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

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

于 2015-02-25T03:04:45.353 回答
0

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

于 2013-10-15T11:55:00.330 回答