【问题标题】:MarkLogic Search API: Limited cts:search() scope to within objects in an arrayMarkLogic 搜索 API:将 cts:search() 范围限制在数组中的对象内
【发布时间】:2022-10-02 04:00:00
【问题描述】:
\"array\": [
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test.com\",
      \"name\": \"Fred\"
    },
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test.com\",
      \"name\": \"Joe\"
    },
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test2.com\",
      \"name\": \"Sarah\"
    },
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test3.com\",
      \"name\": \"Sam\"
    }
]

在上面的 JSON 示例中,我试图匹配数组中的最后一个对象,其中 URL 和名称与我传入的完全相同的值匹配。我的数据中的问题是这个数组可以包含许多相同的对象完全相同的字段和值。

我目前的查询:

cts:search(fn:doc(), 
    cts:and-query((
      cts:json-property-value-query(\"url\", \"http://test3.com\"),
      cts:json-property-value-query(\"name\", \"Sam\")
    ))
) 

当数组如下所示时,此查询会返回误报结果:

\"array\": [
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test3.com\",
      \"name\": \"Fred\"
    },
    {
      \"id\": \"000-1111\",
      \"url\": \"http://test.com\",
      \"name\": \"Sam\"
    }
]

cts:queries 有没有办法将您的搜索限制在 JSON 数组的同一对象内?

此 XPath 方法适用于此数据集集合,但性能不佳:

fn:collection(\"mydata\")[array[url=\"http://test3.com\"][name=\"Sam\"]]

是否有与上述等效的 cts 表达式?

    标签: marklogic


    【解决方案1】:

    不幸的是,您的 object-nodes() 数组未命名,并且没有可锚定的命名字段,并且无法使用 cts:json-property-scope-query() 进行约束

    但是您可以通过应用cts:near-query() 来限制搜索并消除误报,以确保这些属性彼此相邻:

    cts:search(doc(),
      cts:near-query(( 
        cts:json-property-value-query("name", "Sam"),
        cts:json-property-value-query("url", "http://test3.com")
      ), 1) 
    )
    

    或者,您可以对搜索结果应用谓词过滤器,以消除误报。

    let $name := "Sam"
    let $url := "http://test3.com"
    return
      cts:search(doc(), 
        cts:and-query(( 
          cts:json-property-value-query("name", $name),
          cts:json-property-value-query("url", $url)
        )) 
      )[array-node("array")/object-node()[name=$name and url=$url]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多