XQuery Full Text 是 XQuery 1.0 及后续版本中支持语义化、语言感知型全文检索的扩展机制,提供词干提取、停用词过滤、权重排序、短语匹配、布尔组合、邻近搜索等能力,通过 ftcontains 表达式实现,依赖底层引擎(如 eXist-db、BaseX)的全文索引支持。

XQuery Full Text 是 XQuery 1.0 及后续版本(特别是 XQuery 1.0 Full Text 扩展)中定义的一套专门用于在 XML 内容中执行语义化、语言感知型全文检索的语法机制。它不是简单地用 contains() 做子串匹配,而是支持词干提取(stemming)、停用词过滤、权重排序、短语匹配、通配符、布尔组合(AND/OR/NOT)、邻近搜索(near)、大小写与重音不敏感等能力,更接近搜索引擎的行为。
核心语法结构:ftcontains 表达式
ftcontains 是 XQuery Full Text 的关键字,必须配合 ftselection 使用,基本形式为:
-
$node ftcontains "keyword"—— 最简用法,匹配任意含该词的文本节点 -
$node ftcontains "XML" ftand "query"—— 布尔 AND,要求两词都出现 -
$node ftcontains "custom" ftweight 2.5—— 提升匹配项权重(用于排序) -
$node ftcontains phrase "XQuery tutorial"—— 精确短语匹配 -
$node ftcontains "run" ftwith wildcards at start—— 支持前缀通配(如 "running", "runner") -
$node ftcontains "fast" ftor "quick" ftorder by score descending—— 多条件+按相关性排序
与普通 contains() 的关键区别
普通 contains($text, "abc") 只做字符串包含判断,区分大小写,不处理空格/标点,也不理解语言规则。
ftcontains 则依赖底层全文引擎(如 eXist-db、BaseX 或 SQL Server 的 XML 全文索引),自动进行:
- 分词(tokenization)和语言分析(如英文词干还原:running → run)
- 忽略常见停用词(the, and, of 等,除非显式启用)
- 支持字段加权(如 title 比 content 权重高)
- 可结合
ftoptions显式控制行为,例如:ftcontains $b/title ftcontains "xml" ftoptions (language "en", case insensitive, diacritics insensitive)
实际使用前提与限制
不是所有 XQuery 引擎都默认支持 Full Text。需确认:
- eXist-db:从 2.2 版起完整支持,需在 collection 上启用全文索引(
) - SQL Server:XML 列的全文索引 +
.exist()或.value()配合CONTAINS()实现类似效果,但原生ftcontains不可用;它用的是 T-SQL 全文语法,非标准 XQuery FT - BaseX:支持,需开启
ftindex并在查询中启用ft:search或标准ftcontains - Oracle / IBM DB2:部分支持,具体取决于版本和配置
一个典型可运行示例(eXist-db)
假设有如下 XML 文档存于 /db/books.xml:
XQuery Full-Text Search Guide Learn how to search XML with stemming and phrases.
查询标题或描述中包含 “search” 或其变形(如 searching, searched),且同时含 “XML” 的文档:
for $b in doc("/db/books.xml")/book
where $b/(title|desc) ftcontains "search" ftor "searching" ftand "XML"
return $b/title
该查询将命中,因为 “search” 经词干还原后与 “searching” 视为等价,且 “XML” 作为独立词存在。










