全文检索(Full-Text Search)与XML
(ksu99@163.com 摘译自XQuery 1.0 and XPath 2.0 Full-Text W3C Working Draft 09 July 2004
http://www.w3.org/TR/2004/WD-xquery-full-text-20040709/)
XML文档可能包含高度结构化的数据(数字、日期)、非结构化数据(无标签的自由流文本)和半结构化数据(使用内含标签的文本)。当一个文档包含非结构化或者半结构化数据时,能够使用像全文检索这样情报检索(Information Retrieval)技术检索那样的数据是很重要的。 全文检索与子串检索在很多方面不同:
全文检索(full-text search)搜寻短语(一个单词的序列)而不是子串。使用子串检索(substring search)包含字符串“lease”的新闻条目,将会返回一个包含“Foobar Corporation releases the 20.9 version ...”的新闻条目,而对短语“lease”的全文检索不会这样。
期待中的全文检索将支持基于语言和基于标志的检索,而子串检索不能。基于语言检索的一个例子为“给我查找所有包含与‘mouse’有相同词干的词(查找‘mouse’和‘mice’)的新闻条目”。一个基于标记的检索的例子为“给我查找所有在3个词(标记)的‘查询’内包含词‘XML’的新闻项”。
全文检索受语言的变化和微小差别影响。返回的结果常常具有不同的有效性。当你在一个网站上检索所有价格少于100美元的照相机时,这是一个精确的查找。有一组照相机符合这个检索,也有一组不符合。同样地,当你对新闻条目用“mouse”做一个字符串检索时,只有一个预期结果集。当你做全文检索,假定检索所有包含单词“mouse”的新闻条目,你可能希望找到有单词“mice”,可能还有“rodents(啮齿动物)”(或许是“computers”!)。但是不是所有的结果都合适:一些结果比别的更“mousey(像老鼠)”。因为全文检索可以是不精确的,我们有计分或者相关性的概念:我们通常期待看到最有关的结果在结果列表的顶端。当然相关性在旁观者(beholder)的眼中。注意:随着XQuery/XPath的发展,会把计分概念应用到查询结构化检索中。比如,在制订旅行计划或者选购照相机时,有时获得一个接近结果的有序表更有用。如果XQuery/XPath 定义一个统一的不精确的匹配,我们假定能够利用由full-text语言提供的计分构架。
随着XML成为主流,用户期待能以XML格式存储并检索他们的文档。这需要一个标准的方式来对XML文档做全文检索,以及结构化检索。一个相似的对全文检索的需求引导ISO定义SQL/MM-FT标准。SQL/MM-FT定义扩展了SQL,提供了类似的功能,使其能够表达全文查询,正如这里提到的full-text语言对XQuery 1.0/XPath 2.0所做的扩展一样。
全文查询执行在标记化的文本上,也就是分成单词序列、标点符号单元和空格。
一个单词定义为由标记器返回的任意字符、元语法、或者字符序列,作为被查询的基本单元。一个单词的每个实例由一到多个连续的字符组成。除此之外,单词由实现定义。注意连续字不需要由标点或者空格分开,且单词可能交迭。短语是有序字的一个序列,可以包含任意数量的单词。
标记化使得可以用函数和操作符表示单词的相对位置(举例来说,近似操作符)。它也唯一识别包含单词的句子和段落。标记化也使函数和操作符可以操作于单词的一部分或者词根(举例来说,通配符、词干)。我们使用命名空间“ft”(代表full-text)与URL http://www.w3.org/2004/07/xquery-full-text 相应并用来定义全文检索的命名空间。我们也使用“fts”来在语义章节里做定义。