使用多语言列进行FULLTEXT搜索

时间:2010-10-07 13:47:12

标签: sql-server sql-server-2005 internationalization full-text-search

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

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

ProductID    int
Description  nvarchar(max)
Language     char(2)

Language可以是:endeitkrth

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

我正在使用SQL Server 2005。

4 个答案:

答案 0 :(得分:13)

如果您知道哪些行包含哪种语言,则可以创建索引视图,而不是每种语言使用哪种语言,而是将每种语言包含在一个语言中,而每种语言只包含一个语言行。您需要单独查询每个视图。

答案 1 :(得分:4)

引用CREATE FULLTEXT INDEX上的Microsoft参考:

  

对于非BLOB和非XML列   包含多个文本数据   语言,或者用于语言的情况   存储在文本中的语言   列是未知的,它可能是   适合你使用中性   (0x0)语言资源。然而,   首先,你应该了解   使用的可能后果   中性(0x0)语言资源。对于   有关可能的信息   使用的解决方案和后果   中性(0x0)语言资源,   见Best Practices for Choosing a Language When Creating a Full-Text Index

答案 2 :(得分:4)

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

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

  

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

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

答案 3 :(得分:2)

我正在使用20多种语言的观点。适用于查询(如果选择在sprocs中使用的正确视图有点复杂)。但是,基础表上的插入和更新会被破坏,因为计划似乎需要包括对每个ft视图的检查,即使没有更改跟踪。