在Marklogic中使用XQuery理解CTS查询时遇到问题

在Marklogic中使用XQuery理解CTS查询时遇到问题,xquery,marklogic,Xquery,Marklogic,我试图通过使用cts:search()来理解cts:element-value-query和cts:element-word-query之间的区别 当有人能用这三种方法实现同样的目标时,他们为什么要创造这么多呢 我确信我在这里遗漏了一些需要理解的东西。我有以下资料: <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST&

我试图通过使用
cts:search()
来理解
cts:element-value-query
cts:element-word-query
之间的区别

当有人能用这三种方法实现同样的目标时,他们为什么要创造这么多呢

我确信我在这里遗漏了一些需要理解的东西。我有以下资料:

<CATALOG>
  <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
  </CD>
  <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tyler</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
  </CD>
  <CD>
    <TITLE>Greatest Hits</TITLE>
    <ARTIST>Dolly Parton</ARTIST>
    <COUNTRY>EU</COUNTRY>
    <COMPANY>RCA</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1982</YEAR>
  </CD>
</CATALOG>
  • 那么有什么区别呢?什么时候用什么?有人能帮我理解吗


    我的理解是将
    cts:search
    cts:element查询一起使用。我在研究其他的查询,如果我也能用其他查询得到同样的结果。(我已经阅读了我仍然不理解的文档)。有人能给我一个简单的解释吗?

    这三个cts:element-*查询函数有一些重叠的功能,可以得到相同的结果,但有一些关键的差异会影响查询的可能性和效率

    • 是一个容器查询。它与第一个参数中指定的元素匹配。来自第二个参数的查询将应用于匹配的元素及其所有子元素。因此,如果存在更复杂的结构,那么
      cts:word查询将匹配COUNTRY或任何后代元素的文本

      使用查看查询计划

      xdmp:plan(cts:search(//CD,cts:element-query(xs:QName("COUNTRY"),"EU")))
      
      您可以看到,该计划具有应用了无约束单词查询的条件:

      <qry:term-query weight="1">
        <qry:key>17785254954065741518</qry:key>
        <qry:annotation>word("EU")</qry:annotation>
      </qry:term-query>
      
      显示有一个值专门应用于
      COUNTRY
      元素:

      <qry:term-query weight="1">
        <qry:key>9358511946618902997</qry:key>
        <qry:annotation>element(COUNTRY,value("EU"))</qry:annotation>
      </qry:term-query>
      
      <qry:term-query weight="1">
        <qry:key>6958980695756965065</qry:key>
        <qry:annotation>element(COUNTRY,word("EU"))</qry:annotation>
      </qry:term-query>
      
      显示有一个专门应用于
      COUNTRY
      元素的单词查询:

      <qry:term-query weight="1">
        <qry:key>9358511946618902997</qry:key>
        <qry:annotation>element(COUNTRY,value("EU"))</qry:annotation>
      </qry:term-query>
      
      <qry:term-query weight="1">
        <qry:key>6958980695756965065</qry:key>
        <qry:annotation>element(COUNTRY,word("EU"))</qry:annotation>
      </qry:term-query>
      

      这是告诉MarkLogic您要在
      国家
      元素(而不是它的任何子元素或后代)中搜索值“EU”的最具体、最有效的方法。

      这三个cts:element-*查询函数有一些重叠的功能,可以得到相同的结果,但是有一些关键的差异会影响查询的可能性和效率

      • 是一个容器查询。它与第一个参数中指定的元素匹配。来自第二个参数的查询将应用于匹配的元素及其所有子元素。因此,如果存在更复杂的结构,那么
        cts:word查询将匹配COUNTRY或任何后代元素的文本

        使用查看查询计划

        xdmp:plan(cts:search(//CD,cts:element-query(xs:QName("COUNTRY"),"EU")))
        
        您可以看到,该计划具有应用了无约束单词查询的条件:

        <qry:term-query weight="1">
          <qry:key>17785254954065741518</qry:key>
          <qry:annotation>word("EU")</qry:annotation>
        </qry:term-query>
        
        显示有一个值专门应用于
        COUNTRY
        元素:

        <qry:term-query weight="1">
          <qry:key>9358511946618902997</qry:key>
          <qry:annotation>element(COUNTRY,value("EU"))</qry:annotation>
        </qry:term-query>
        
        <qry:term-query weight="1">
          <qry:key>6958980695756965065</qry:key>
          <qry:annotation>element(COUNTRY,word("EU"))</qry:annotation>
        </qry:term-query>
        
        显示有一个专门应用于
        COUNTRY
        元素的单词查询:

        <qry:term-query weight="1">
          <qry:key>9358511946618902997</qry:key>
          <qry:annotation>element(COUNTRY,value("EU"))</qry:annotation>
        </qry:term-query>
        
        <qry:term-query weight="1">
          <qry:key>6958980695756965065</qry:key>
          <qry:annotation>element(COUNTRY,word("EU"))</qry:annotation>
        </qry:term-query>
        
        这是告诉MarkLogic您要在
        COUNTRY
        元素(而不是它的任何子元素或后代)中搜索值“EU”的最具体、最有效的方法