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

标签 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。

最佳答案

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

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

机器学习

关于sql - 如何在 SQL Server 中实现多语言内容的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17184374/

相关文章:

mysql - 如何比较sql中同一个表的行

php - MySQL 返回结果的时间太长

SQL字母数字排序问题

sql - PostgreSQL - GROUP BY 时间戳值?

sql - 不同表中的多个查询

mysql - 如何从单个组中获取最后一条记录

c# - 在一个查询中插入两个表

sql-server - 减少 MS SQL 上更新查询时 PAGE 级别的死锁

c# - 系统时间关闭时如何使用 SQL Server 的 GETDATE()?

c# - Entity Framework 中的关系问题