【发布时间】: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