gpt4 book ai didi

marklogic - cts :element-query vs cts:path-range-query performance

转载 作者:行者123 更新时间:2023-12-03 22:00:14 29 4
gpt4 key购买 nike

我们正在开发一个存储大量数据的企业应用程序。在我们的应用程序中,我们强制用户创建多个路径范围索引以加快搜索速度。

早些时候,我们利用路径范围索引来加快搜索速度,使用 cts:路径范围查询()但现在我发现使用 可以得到同样的结果cts:元素查询()无需创建路径范围索引。

例如 -

  • 使用 cts:路径范围查询() -> 这里我需要为/tXML/Message/INVENTORY/ASNId 创建路径范围索引
    xquery version "1.0-ml";
    cts:uris('', (), cts:and-query((cts:collection-query("integration"),
    cts:path-range-query("/tXML/Message/INVENTORY/ASNId", "=", "10121600"))))
  • 使用 cts:元素查询() -> 这里我不需要创建路径范围索引。
    xquery version "1.0-ml";
    cts:uris('', (), cts:and-query((cts:collection-query("integration"),
    cts:element-query(xs:QName("tXML"),cts:element-query(xs:QName("Message"), cts:element-query(xs:QName("INVENTORY"), cts:element-value-query(xs:QName("ASNId"), "10121600")))))))

  • 我的问题是,
  • 如果我使用 cts:element-query() 得到与 cts:path-range-query() 相同的结果,那么为什么我需要强制用户创建路径范围索引?。
  • 哪个查询适合大量数据?.( cts:element-query() cts:path-range-query() )

  • 请帮我找到这两个问题的答案。

    最佳答案

    答案并不完全直接,这意味着结果可能因数据和数量而异。

    不过有几个注意事项:

  • 您的查询在语义上并不相同。元素查询检查祖先,而在路径中你可以更严格,并且需要特定的 parent ,所以直接父子关系而不是祖先后代关系
  • 范围查询是针对具有预定义排序规则的范围索引进行解析的,并且始终针对整个(“精确”)值。然而,值查询是针对通用索引解决的。更具体地说,针对具有非词干标记的索引。如果您的值包含多个标记,则需要启用位置或过滤搜索以确保准确性。但是,您示例中的值仅包含一个 token 。
  • 路径范围索引在摄取时需要付出代价,略大于元素范围索引。范围索引也需要额外的内存。元素查询和元素值查询在搜索时需要做更多的工作来解决。但是,您可能需要一个大的测试集才能注意到显着差异。
  • 最后但并非最不重要的一点是,您不能在没有范围索引的情况下进行不等式查询或方面的值查找等。

  • 哼!

    关于marklogic - cts :element-query vs cts:path-range-query performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60037907/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com