使用多语言列进行FULLTEXT搜索

egr*_*nin 12 sql-server full-text-search sql-server-2005 internationalization

有没有办法在多语言表中使用FULLTEXT而不为每种语言提供自己的列?

我有一个我需要搜索的列,但该列中的语言有所不同:

ProductID    int
Description  nvarchar(max)
Language     char(2)
Run Code Online (Sandbox Code Playgroud)

Language可以是一个:en,de,it,kr,th

目前,我建立了一致性并将其用于搜索.但这仅适用于英语,德语和意大利语,甚至适用于那些不支持词干的人.其他所有用途LIKE '%searchterm%',我都在努力改进.

我正在使用SQL Server 2005.

Dan*_*haw 13

如果您知道哪些行包含哪种语言可以创建索引视图,而不是每种语言使用单独的列,则可以创建索引视图,以便仅包含每种语言的单个语言行和每种语言的FTI.您需要单独查询每个视图.


Joe*_*lli 5

引用 Microsoft 关于CREATE FULLTEXT INDEX的参考:

对于包含多种语言文本数据的非 BLOB 和非 XML 列,或者列中存储的文本语言未知的情况,使用中性 (0x0) 语言资源可能比较合适。但是,首先您应该了解使用中性 (0x0) 语言资源可能产生的后果。有关使用中性 (0x0) 语言资源的可能解决方案和后果的信息,请参阅创建全文索引时选择语言的最佳实践。

  • 这些页面基本上说:不。 (2认同)

Sep*_*eph 5

我知道这是一个老问题,但我刚刚遇到它。

我见过的一种方法是使用 XML 列并指定属性xml:lang。如CREATE FULLTEXT INDEX (Transact-SQL)中所述。

对于存储在 XML 或 BLOB 类型列中的文档,将在索引时使用文档中的语言编码。例如,在 XML 列中,XML 文档中的 xml:lang 属性将标识语言。在查询时,先前在 language_term 中指定的值将成为用于全文查询的默认语言,除非将 language_term 指定为全文查询的一部分。

这种方法的主要缺点是它将数据类型更改为 XML,但它似乎可以很好地满足我们当时的需求。