在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”的最具体、最有效的方法