Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLServer中实现多语言内容的全文搜索_Sql_Sql Server_Sql Server 2008_Tsql_C# 4.0 - Fatal编程技术网

如何在SQLServer中实现多语言内容的全文搜索

如何在SQLServer中实现多语言内容的全文搜索,sql,sql-server,sql-server-2008,tsql,c#-4.0,Sql,Sql Server,Sql Server 2008,Tsql,C# 4.0,我们有一个支持不同语言的网站。我们有数以百万计的数据,因此在搜索中,我们希望实现SQL Server全文搜索 我们目前的表结构如下所示 CREATE TABLE Product ( ID INT IDENTITY(1,1), Code VARCHAR(50), ........ ........ ) CREATE TABLE ProductLanguage ( ID INT, LanguageID INT, Name NVARCHAR(200),

我们有一个支持不同语言的网站。我们有数以百万计的数据,因此在搜索中,我们希望实现SQL Server全文搜索

我们目前的表结构如下所示

CREATE TABLE Product
(
   ID INT IDENTITY(1,1),
   Code VARCHAR(50),
   ........
   ........
)

CREATE TABLE ProductLanguage
(
   ID INT,
   LanguageID INT,
   Name NVARCHAR(200),
   ........
   ........
)
我们希望在“Name”列中实现全文搜索,因此我们在Name列上创建了全文索引。但在创建全文索引时,我们只能为每列选择一种语言。如果我们选择“English”或“Neutral”,则不会返回其他语言(如日语、汉语、法语等)的预期数据

那么,在SQLServer中实现多语言内容全文搜索的最佳方法是什么呢

我们需要创建一个不同的表吗。如果是,那么什么是表结构(我们需要记住,语言不是固定的,以后可以添加不同的语言)以及什么是搜索查询

我们正在使用SQL Server 2008 R2。

某些内容(文档)类型支持语言设置,例如Microsoft Office文档、PDF、[X]HTML或XML

如果将名称列的类型更改为XML,则可以确定每个值的语言(即每行)。例如:

而不是将值存储为字符串

name 1
name 2
name 3
…您可以使用适当的语言声明将它们存储为XML文档:

<content xml:lang="en-US">name 1</content>
<content xml:lang="fr-FR">name 2</content>
<content xml:lang="en-UK">name 3</content>
name 1
名称2
名字3
在全文索引填充期间,将根据每个值(XML文档)的语言设置使用正确的分词器/词干分析器:名称1为美式英语,名称2为法语,名称3为英式英语

当然,这需要对数据的管理和使用方式进行重大更改


ML

我会担心使用XML而不是NVARCHAR(n)的性能——尽管我没有确凿的证据。
一种替代方法是使用动态SQL(动态生成特定于语言的代码),并结合产品表上特定于语言的索引视图。thsi的缺点是缺乏执行计划缓存,即:性能。

与Matija Lah的答案相同,但这是MS白皮书中概述的建议解决方案

  • 当索引内容为二进制类型(如Microsoft Word)时 文档),负责处理文本内容的iFilter 在发送给分词器之前,可能会使用特定的语言 二进制文件中的标记。在这种情况下,在索引时 iFilter为特定文档或文档调用正确的分词器 用特定语言指定的文档的一部分。你需要的一切 在这种情况下,要做的是在索引后验证多语言 内容索引正确。Word、HTML和XML的过滤器 文档在文档内容中遵循语言规范属性:
  • Word–语言设置
  • HTML-
  • XML-
    xml:lang
    属性
  • 当您的内容是纯文本时,您可以 可以将其转换为XML数据类型,并将特定的语言标记添加到 指明与该特定文档或文档相对应的语言 文件部分。请注意,为了使其工作,在索引之前 必须知道将要使用的语言

即使这不是改变的时候,将来你也应该考虑使用像Lucene,ErructScript,Xapian这样的真正的搜索引擎。根据我的经验,对数据库进行全文搜索会导致客户越来越多的人为要求,而这些要求并没有建立数据库。请参阅Matija Lah-它是否会覆盖现有的语言设置(我在列上创建全文索引时选择的语言设置)?