有没有办法在多语言表中使用FULLTEXT而不为每种语言提供自己的列?
我需要搜索一列,但该列中的语言有所不同:
ProductID int
Description nvarchar(max)
Language char(2)
Language
可以是:en
,de
,it
,kr
,th
目前我建立了一致性并将其用于搜索。但这仅适用于英语,德语和意大利语,甚至适用于那些不支持词干的人。其他所有内容都使用LIKE '%searchterm%'
,我正在努力改进它。
我正在使用SQL Server 2005。
答案 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视图的检查,即使没有更改跟踪。