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 是 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($text, "abc") 只做字符串包含判断,区分大小写,不处理空格/标点,也不理解语言规则。
ftcontains 则依赖底层全文引擎(如 eXist-db、BaseX 或 SQL Server 的 XML 全文索引),自动进行:
ftoptions 显式控制行为,例如:ftcontains $b/title ftcontains "xml" ftoptions (language "en", case insensitive, diacritics insensitive)
不是所有 XQuery 引擎都默认支持 Full Text。需确认:

).exist() 或 .value() 配合 CONTAINS() 实现类似效果,但原生 ftcontains 不可用;它用的是 T-SQL 全文语法,非标准 XQuery FTftindex 并在查询中启用 ft:search 或标准 ftcontains
假设有如下 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” 作为独立词存在。