2010-10-18 78 views
3

我有一个包含英文和日文文本的nvarchar列。我想在此专栏中进行全文搜索。当配置全文搜索时,我们需要指定分词器的语言选项(例如,使用英语工作断言器或使用日语分词器)。我想知道在这种情况下,我应该分配哪种语言?我不确定日语工作者是否也适用于英语。关于SQL中的全文查询

我正在使用SQL Server 2008 Enterprise。

由于事先 乔治

+3

将英文和日文文本分隔成不同的列会不会更好(如果可能)?然后你可以对每一个应用文本搜索。 – Tony 2010-10-18 10:25:06

+0

这是英文栏还是日文栏是空的?在我的申请中,要搜索的栏目是日文或英文。所以,对于每一列,我需要创建两个额外的列,英文栏和日文栏。 :-) – George2 2010-10-18 10:31:01

+1

但是你也可以删除原来的列,所以只有一个额外的列。看起来像一个很好的解决方案? – thomaspaulb 2010-10-18 13:16:04

回答

1

应选择中性词断路器如果你在它有不同的语言(尤其是西方和非西方语言一起)列。

还有一些其他选择,如

  • 每个语言分离该列(如@Tony说明)
  • 如果你的数据是一个纯文本;将其转换为xml数据类型并添加指示全文引擎使用的语言的语言标记。
  • 开发自定义断字(虽然这不是一个最佳的解决方案)

下面是用于创建全文索引时选择语言的article的最佳做法。

后添加评论

它可以根据您的使用情况下,许多方式查询多个列。最简单的方法是使用CONTAINS谓词通过指定要搜索的列列表来查询多列,如下所示;

SELECT Name, Color FROM Production.Product 
WHERE CONTAINS((Name, Color), 'Red'); 

另一种解决方案可以使用能够在的情况下使用一个语言指示器柱/ IF语句,这有助于你有条件通过语言分割查询。您也可以使用DATALENGTH()TSQL函数来检查它是否为空并决定选择哪一列。

+0

感谢orka!如何实现更好的工作中断和更准确的全文搜索性能?使用中性工作断路器或对不同的语言使用单独的列? – George2 2010-10-19 00:56:10

+1

我认为如果为了获得准确的结果和性能而使用各种语言分隔列会更好。 – orka 2010-10-19 08:36:16

+0

非常感谢orka,如果我按语言分隔各列,例如英文专栏和日文专栏。我将在英文专栏中使用英文分词器,并在日文专栏中使用日语分词器。因此,英文或日文栏是空的,因为一行是特定的语言,不能使用两种语言(例如,日文栏有一个空的英文栏)。但是我的查询条件是,返回任何匹配的行或英文或日文列匹配输入查询。我不知道如何编写这样的全文查询,有什么想法? – George2 2010-10-20 15:51:18