XQuery(BaseX)中不同全文搜索方式的速度

XQuery(BaseX)中不同全文搜索方式的速度,xquery,basex,xquery-3.0,Xquery,Basex,Xquery 3.0,我使用BaseX9.3.1访问大约45000个字典条目,其中包含大约100万个示例等,具有全文索引以及一个用于所有文本节点和属性的索引。到目前为止,情况很糟糕。访问节点获取语法或含义的速度相当快。然而,访问示例的速度非常慢,但仅在某些查询中,而不是在所有查询中。我试图找到下面的原因,但在BaseX文档或一些XQuery页面等方面没有成功。也许我只是没有看到树的森林。问题是: ft:search("myDatabase", "mySearchString") 速度非常快,响应时间不到一秒钟 ft

我使用BaseX9.3.1访问大约45000个字典条目,其中包含大约100万个示例等,具有全文索引以及一个用于所有文本节点和属性的索引。到目前为止,情况很糟糕。访问节点获取语法或含义的速度相当快。然而,访问示例的速度非常慢,但仅在某些查询中,而不是在所有查询中。我试图找到下面的原因,但在BaseX文档或一些XQuery页面等方面没有成功。也许我只是没有看到树的森林。问题是:

ft:search("myDatabase", "mySearchString")
速度非常快,响应时间不到一秒钟

ft:contains(db:open("myDatabase")/path/to/target/node, "mySearchString")
以及

db:open("myDatabase")/path/to/target/node contains text "mySearchString"

速度太慢(>30秒)而且很重,有时甚至会损坏服务器

我试图通过更改词干或排序的选项来找出差异,但在速度方面没有明显的差异
ft:contains()
是标准XQuery的扩展版
包含文本
ft:search
似乎是用于全文搜索的BaseX命令(请参阅)

ft:search()。但这实际上更像是一种变通方法。我需要理解为什么直接访问路径如此之慢,即使它也有一个索引。使用
text()
代替任何版本的contain或match也会更快,但这不是应用程序的选项,因为搜索必须获取文本内容的“部分”,而不是“精确”

感谢您的任何建议/想法/帮助

在as数据库和全文索引打开的情况下:
SET FTINDEX true
CREATE DB factbook/path/to/factbook.xml
比较导致相同结果的两个查询,两个查询在计算时间方面几乎相同。难怪:
/*:name[text()包含文本“French”]
将由BaseX(v.9.2.2)优化为
ft:search(“factbook”,“French”)/parent:*:name
db:open("myDatabase")/path/to/target/node[contains(./text(), "mySearchString")]