9

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

我有一个专栏中,我需要搜索,但在该列中的语言而异:

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

Language可以是一个:endeitkrth

目前我建用于搜索的一致性和用途。但这只适用于英语,德语和意大利语,即使对于那些不支持词干的人也是如此。其他一切使用LIKE '%searchterm%',我试图改善这一点。

我使用的是SQL Server 2005中

回答

11

而不是每个语言都有一个单独列的,如果你知道哪些行包含您可以创建过滤,包括每种语言的单一的langauge只排索引视图的语言和FTI每一个。你需要分别查询每个视图。

+0

我没有想过使用视图,这可能实际上工作。 – egrunin 2010-10-07 14:06:25

2

从Microsoft参考报价在CREATE FULLTEXT INDEX

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

+0

这些网页基本上说:不。 – egrunin 2010-10-07 14:08:52

2

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

+0

谢谢。我现在正在其他地方工作,但你永远不知道明天会发生什么:) – egrunin 2014-01-09 13:49:53

4

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

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

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

该方法的主要缺点是它将数据类型更改为XML,但它似乎对我们当时的需求正常工作。

+0

我会研究这个,谢谢。 – egrunin 2014-03-13 20:30:45