注册查询如何在 MarkLogic 中工作?

How registered queries work in MarkLogic?

在文档中说 "Registering a cts:query expression stores a pre-evaluated version of the expression"

这是否意味着注册查询会将查询的实际结果(XML 个文档)存储在某些缓存中?

如果以上为真

如果以上为假,注册查询的内部功能是什么?

注册一个 cts:query 对于您认为会再次使用的复杂查询很有用,因为它存储了相交的术语列表结果,因此不必再次相交

想象一个具有大量布尔约束的复杂 cts:query。当您将它作为更大查询的一部分重用时,服务器将在术语列表缓存中缓存每个单独的术语列表,但它仍然必须为更大的查询完成所有交集工作。通过对较大的查询执行 cts:register(),您告诉服务器存储相交的结果,因此它可用作 cts:registered-query()。节省服务器 CPU 工作量。

它最初是为想要定义动态搜索域的客户添加的,所有搜索都将针对该域执行(例如您从网站购买的材料)。当搜索域变得足够复杂时,将需要付出大量努力才能重新交叉相同的术语列表。注册查询有帮助。用户登录,将他们的域注册为查询,然后重复使用。术语列表交集工作将恰好在他们的搜索和他们的预物化域之间。

服务器在隐式注册查询方面做得很好,因此不必像以前那样手动执行此操作。注册很便宜。它只是查询哈希的查找 table 和相应的相交术语列表结果。由于结果已经在第一次使用时计算出来,因此存储起来很便宜,不会影响性能,只是占用了一点内存。允许使用固定数量,较少使用的将被清除。

缓存是按站点维护的,因此即使您正在更改数据,缓存也不会过时。魔法!

我在 Inside MarkLogic Server 中对此进行了更深入的介绍,包括展示如何轻松使用该功能的使用模式。