在文档中,它说"注册cts:query表达式存储表达式的预评估版本">
这是否意味着注册查询会将查询的实际结果(XML文档(存储在某个缓存中?
如果以上为真实
- 如果查询匹配大量文档,会影响性能吗
- 正在使用什么缓存
- 在更新/上传满足注册查询的旧/新文档时,是否也会更新缓存(预评估(结果
如果以上为假,注册查询的内部功能是什么?
注册cts:query
对于您认为将再次使用的复杂查询非常有用,因为它存储了相交的术语列表结果,因此不必再次与相交
想象一个有很多布尔约束的复杂cts:query
。当您将其作为较大查询的一部分重新使用时,服务器将在术语列表缓存中缓存每个单独的术语列表,但它仍必须为较大查询执行所有交叉工作。通过对较大的查询执行cts:register()
,您可以告诉服务器存储相交的结果,因此它可以作为cts:registered-query()
使用。节省服务器CPU工作量。
它最初是为那些希望定义动态搜索域的客户添加的,所有搜索都将针对该域执行(比如你从网站上购买的材料(。当搜索领域变得足够复杂时,将花费大量精力重新交叉相同的术语列表。注册查询有帮助。用户登录,将其域注册为查询,然后重用。术语列表的交集工作就在它们的搜索和它们的预物化域之间。
服务器在隐式注册查询方面做得很好,所以不像以前那样需要手动注册。注册很便宜。它只是查询散列和相应的相交术语列表结果的查找表。由于结果已经在第一次使用时计算出来,所以存储起来很便宜,没有性能影响,只需要一点用过的内存。允许有一个固定的数字,较少使用的数字会被清除。
缓存是按机架维护的,因此即使在更改数据时,缓存也不会过时。魔术
我在Inside MarkLogic Server中对此进行了更深入的介绍,包括展示如何轻松使用该功能的使用模式。