【问题标题】:How does SQL Server full-text Index actually index the words in a catalog?SQL Server 全文索引如何实际索引目录中的单词?
【发布时间】:2012-10-19 18:08:08
【问题描述】:

我一直在努力寻找有关全文索引用于索引分配给文档的全文目录的过程的答案,其中文档主键包含在索引中。我还没有找到深入描述这一点的 MSDN 文章。

为什么我不能用它在全文搜索列中搜索纯整数字符串?

在这里查看:(好吧,我是新用户,所以我自己重新制作了列,因为我无法发布图片)

 ID       FIRSTNAME   LASTNAME    ADDRESS            FULLTEXTCOLUMN
 1         JOHN        DOE        123 Main St.       1  JOHN DOE 123 Main St. 
 2         JANE        DOE        124 Summer St.     2  JANE DOE 124 Summer St.
                                                     ^ ----------^ --can't search 

例如,在this link 中,该帖子的作者显示他已将主键 int-only 索引包含在他的全文索引列中 --- 但为什么呢?在尝试对我自己的 int 值进行 CONTAINS() 搜索后,搜索找不到任何没有附加文本的内容。

那么为什么这么多人在他们的目录中只显示整数字符串,如果它们不可搜索呢?我非常需要目录中的整数搜索选项,希望我只是遗漏了一些东西。

这是否意味着索引只分配给至少包含一个字母的字符串?

这个问题here 描述的目录格式非常接近我试图欺骗系统在 SQL Server 中执行的操作(因为这是我唯一的数据库选项)。

感谢您的帮助!

是的,这是我的封闭问题here,但我不在乎,因为这是一个“真实”的问题,而且很重要。我背后有一群人在想这个。

【问题讨论】:

  • 我不确定您的问题是什么:您链接到的示例不包括索引中的主键,它使用它作为“键索引”。 documentation 表示全文索引需要表上的 PK(或非 NULL 唯一索引);这在DDL reference 中被称为“关键索引”。 FullTextValue 列是实际为 FTS 编制索引的列;键索引只是将索引数据链接到行的一种方式(我假设)。
  • 也许我错过了什么,但从我对他的过程的理解来看,1.将主键放在索引 [EmpID] 上,2.连接 [FullTextValue] 中的所有列(包括主键列 EmpID) ] 列,3.在[FullTextValue]上创建全文目录,4.在整个表格上创建全文索引。那么为什么要在 [FullTextValue] 中包含 EmpID 呢?当他加入表格时,他仍然使用 [EmpID] 并依赖于每个包含 PK 值的字符串,但确实挑出了“'3'”......我猜只是为了 CONTAINSTABLE() 的目的。改写我的问题。谢谢:)
  • 我误解了你的问题:我以为你问的是第 4d 步,但你的问题实际上是关于 4a 的。最明显的原因是将代码从WHERE col1 LIKE '%x%' OR col2 LIKE '%x%' OR...“简化”为WHERE anycolumn LIKE '%x%'。但我根本不明白这一点:FTS 允许您在一个索引和one FTS query 中包含多列,所以我不知道为什么作者决定需要将他的文本连接到一列中。
  • 谢谢@Pondlife。我手头有最疯狂的数据库方案之一,这真的让我失望(我希望有 int-string 搜索功能)。我很奇怪(特别是因为我在 MSDN 中找不到解释)为什么全文索引不会在索引中包含一串整数(例如:街道编号 1234 而不是 c1234,它出现在包含搜索中完美)。我只是猜测该表只能索引它具有使用“英语”库选项的字典查找单词。不包括整数真是太可惜了
  • 如果文档中有“100 puppies”和“66 puppies”等排名较高的短语,我要搜索短语“55 puppies”怎么办?似乎微软会包括在内,这就是为什么我如此努力地弄清楚它的原因。我想这就是为什么他们要实现像 MapReduce 这样的东西,这是超级坏蛋。非常感谢你的帮助。如果您想发布答案,我一定会接受。

标签: sql-server-2008 optimization integer full-text-indexing


【解决方案1】:

经过大量测试(并关闭了 StopList,它阻止了对仅整数字符串的索引——文章的作者链接的 DID 所做的)看起来它索引了每个由空格分隔的字符串,包括整数。我相信实际被索引的单词会使用有关该列中的行、列和单元格类型或位置的信息进入目录。

整个表中的所有内容都会获得一个关系索引,只要它是用空格分隔的。

【讨论】:

  • IIRC,性能对你来说非常重要。除了维护之外,您是否碰巧知道这是否比 XML index 表现更好?
  • @TimLehner ,据我所见,xml 让我想起了更多类似于 SQL 的 HIERARCHYID (这很棒,我真的很喜欢)搜索节点并知道方向的东西您想向上/向下/侧向/侧伸以获取与该节点相关的更多信息。如果这是在全文搜索的背景下完成的,我不会感到惊讶,除了 SQL 实现不同/更多/预先连接的执行统计信息(我的猜测是 FTS 会因此更快)。不过我肯定想看看你的 XML 代码——它看起来很有希望
  • 对不起,我的漫无边际。 this article 让我认为 xml 索引会更慢,因为它必须检查/忽略更多令牌才能获取数据。
猜你喜欢
  • 2010-09-14
  • 2019-05-02
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
相关资源
最近更新 更多