Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Marklogic如何构造cts查询_Oracle_Marklogic - Fatal编程技术网

Oracle Marklogic如何构造cts查询

Oracle Marklogic如何构造cts查询,oracle,marklogic,Oracle,Marklogic,我有一个Oracle查询,希望转换为Marklogic cts查询。看起来Marklogic CTS不允许在and query中包含and query。我不确定Marklogic是如何工作的。提前谢谢 Where子句查询: where (collection = "TRBA" AND fulltext = 1 AND (dnta = "Briefing" OR dnta = "Conference" OR snta = "Workshop" OR snta

我有一个Oracle查询,希望转换为Marklogic cts查询。看起来Marklogic CTS不允许在and query中包含and query。我不确定Marklogic是如何工作的。提前谢谢

Where子句查询:

where (collection = "TRBA" AND fulltext = 1 
       AND (dnta = "Briefing" OR dnta = "Conference" OR snta = "Workshop"
            OR snta = "Published in" AND (snta = "this article" OR dnta = "Journal")
      )
      AND (cand IN ("Research","Development Center") OR scn IN("424778","98814","393825")) 
翻译成Marklogic:

let $uris:= cts:uris(
                     (),
                     (),
                     cts:and-query((
                          cts:collection-query("/dbs/"TRBA"),
                          cts:element-value-query(xs:QName("meta:FullTextExists"),"1"),
                          cts:field-word-query("dnta",("briefing","conference")),

                         cts:or-query((
                              cts:element-word-query(xs:QName("meta:snta"),("this article")),
                              cts:field-word-query("dnta",("Journal")),

                        cts:and-query((
                             cts:or-query((
                                   cts:field-word-query("cand", ("Research","Development Center"))
                                   cts:field-word-query("scn",("424778","98814","393825")) 
                             ))
                          ))(:inside and-query:)
                        ))(:or-query:)
                     ))(:outside and-query:)

 return fn:doc($uris)

您的代码中有几个拼写错误。集合查询中有一个额外的双引号,并且在最后一个or查询中的项之间缺少逗号

一旦修复了这些问题,代码将运行。但是一个专业提示:永远不要只为了获取文档而获取URI。你在浪费精力。只需通过一个通过查询的搜索直接获取文档

let $q := cts:and-query((...))
return cts:search(doc(), $q)[1 to 10]

除非您真的打算返回完整的结果集,否则您可能还想添加一个类似于[1到10]的限制。

您的代码中有几个输入错误。集合查询中有一个额外的双引号,并且在最后一个or查询中的项之间缺少逗号

一旦修复了这些问题,代码将运行。但是一个专业提示:永远不要只为了获取文档而获取URI。你在浪费精力。只需通过一个通过查询的搜索直接获取文档

let $q := cts:and-query((...))
return cts:search(doc(), $q)[1 to 10]
您可能还想添加一个类似于[1到10]的限制,除非您真的打算返回完整的结果集

上面的代码中有一些基本语法错误:缺少paren,额外的双引号 我认为您不希望word query作为=;单词查询只是说单词出现在相关字段的某个地方;我认为这应该是一个值查询。 您可能想看看cts:parse,它接受带有and和ORs等的字符串以及字段绑定,并将查询字符串解析为cts:query 也就是说,如果您假设AND与ORs混合后绑定到最近的子句,即如括号中所示:

(collection = "TRBA" AND
 fulltext = 1  AND
 (dnta = "Briefing" OR
  dnta = "Conference" OR
  snta = "Workshop" OR
  (snta = "Published in" AND (snta = "this article" OR dnta = "Journal"))
 ) AND
 (cand IN ("Research","Development Center") OR
  scn IN ("424778","98814","393825"))
然后我会这样翻译:

cts:and-query((
  cts:collection-query("/dbs/TRBA"),
  cts:element-value-query(xs:QName("meta:FullTextExists"),"1"),
  cts:or-query((
    cts:field-value-query("dnta",("Briefing","Conference")),
    cts:field-value-query("snta","Workshop"),
    cts:and-query((
      cts:field-value-query("snta","Published in"),
      cts:or-query((
        cts:field-value-query("snta","this article"),
        cts:field-value-query("dnta","Journal")
      ))
    ))
  )),
  cts:or-query((
    cts:field-value-query("cand",("Research","Development Center")),
    cts:field-value-query("scn",("424778","98814","392825"))
  ))
))
这是一个相当直接的映射

上面的代码中有一些基本语法错误:缺少paren,额外的双引号 我认为您不希望word query作为=;单词查询只是说单词出现在相关字段的某个地方;我认为这应该是一个值查询。 您可能想看看cts:parse,它接受带有and和ORs等的字符串以及字段绑定,并将查询字符串解析为cts:query 也就是说,如果您假设AND与ORs混合后绑定到最近的子句,即如括号中所示:

(collection = "TRBA" AND
 fulltext = 1  AND
 (dnta = "Briefing" OR
  dnta = "Conference" OR
  snta = "Workshop" OR
  (snta = "Published in" AND (snta = "this article" OR dnta = "Journal"))
 ) AND
 (cand IN ("Research","Development Center") OR
  scn IN ("424778","98814","393825"))
然后我会这样翻译:

cts:and-query((
  cts:collection-query("/dbs/TRBA"),
  cts:element-value-query(xs:QName("meta:FullTextExists"),"1"),
  cts:or-query((
    cts:field-value-query("dnta",("Briefing","Conference")),
    cts:field-value-query("snta","Workshop"),
    cts:and-query((
      cts:field-value-query("snta","Published in"),
      cts:or-query((
        cts:field-value-query("snta","this article"),
        cts:field-value-query("dnta","Journal")
      ))
    ))
  )),
  cts:or-query((
    cts:field-value-query("cand",("Research","Development Center")),
    cts:field-value-query("scn",("424778","98814","392825"))
  ))
))

这是一个非常直接的映射。

谢谢。现在我了解了如何构造marklogic查询。谢谢。现在我了解了如何构造marklogic查询。