注册查询如何在MarkLogic中工作



在文档中,它说"注册cts:query表达式存储表达式的预评估版本">

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

如果以上为真实

  • 如果查询匹配大量文档,会影响性能吗
  • 正在使用什么缓存
  • 在更新/上传满足注册查询的旧/新文档时,是否也会更新缓存(预评估(结果

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

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

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

它最初是为那些希望定义动态搜索域的客户添加的,所有搜索都将针对该域执行(比如你从网站上购买的材料(。当搜索领域变得足够复杂时,将花费大量精力重新交叉相同的术语列表。注册查询有帮助。用户登录,将其域注册为查询,然后重用。术语列表的交集工作就在它们的搜索和它们的预物化域之间。

服务器在隐式注册查询方面做得很好,所以不像以前那样需要手动注册。注册很便宜。它只是查询散列和相应的相交术语列表结果的查找表。由于结果已经在第一次使用时计算出来,所以存储起来很便宜,没有性能影响,只需要一点用过的内存。允许有一个固定的数字,较少使用的数字会被清除。

缓存是按机架维护的,因此即使在更改数据时,缓存也不会过时。魔术

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

最新更新