2

次のxmlを検討してください:-

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
</catalog>

次に、このドキュメントに対して検索クエリを実行し、フィルタリングされた結果セット(作成者名など)を返します。

これを行う1つの方法は次のとおりです。-

xquery version "1.0-ml";
import module namespace search="http://marklogic.com/appservices/search" 
at "/Marklogic/appservices/search/search.xqy";

declare variable $options:=
<options xmlns="http://marklogic.com/appservices/search">
<transform-results apply="raw"/>
</options>;

for $x in search:search("", $options)/search:result
return $x//author/text()

ただし、search:searchAPIは最初に結果全体をキャッシュにキャッシュし、次にxpathを使用して目的のノードを見つけます。これは欲しくない。search:search結果セット全体がmarklogicサーバーにキャッシュされないように、APIが目的の要素のみを返すようにしたい。誰かが私にこれをどのように達成できるか教えてもらえますMarklogicか?

4

3 に答える 3

0

Puneet、MarkLogic バージョン 5.0 を使用している場合は、「メタデータ スニペット」と呼ばれるものを構成して、デフォルトのスニペットの代わりに必要な要素だけを取得できます。

構成例を次に示します。

<options xmlns="http://marklogic.com/appservices/search">
    <transform-results  apply="metadata-snippet">
        <preferred-elements>
            <element name='ordinal' ns='http://marklogic.com/ns'/>
        </preferred-elements>
    </transform-results>
</options>

そしてもう一つ:

<options xmlns="http://marklogic.com/appservices/search">
    <transform-results  apply="metadata-snippet">
        <preferred-elements>
            <element name='author' ns=''/>
            <element name='title' ns=''/>
        </preferred-elements>
    </transform-results>
</options>
于 2012-05-10T17:22:17.407 に答える
0

非常にスリムな結果が必要な場合は、search:search の代わりに Cts:search を使用してください。

xquery version "1.0-ml";
import module namespace search="http://marklogic.com/appservices/search" 
 at "/Marklogic/appservices/search/search.xqy";

  declare variable $options:=
    <options xmlns="http://marklogic.com/appservices/search">
     <grammar xmlns="http://marklogic.com/appservices/search">
      <quotation>"</quotation>
       <implicit>
     <cts:and-query strength="20" xmlns:cts="http://marklogic.com/cts"/>
      </implicit>
     <starter strength="30" apply="grouping" delimiter=")">(</starter>
      <starter strength="40" apply="prefix" element="cts:not-query">- </starter>
  <joiner strength="10" apply="infix" element="cts:or-query" 
  tokenize="word">OR</joiner>
 <joiner strength="20" apply="infix" element="cts:and-query" 
  tokenize="word">AND</joiner>
 <joiner strength="30" apply="infix" element="cts:near-query" 
  tokenize="word">NEAR</joiner>
 <joiner strength="30" apply="near2" element="cts:near-query">NEAR/</joiner>
 <joiner strength="50" apply="constraint">:</joiner>
 <joiner strength="50" apply="constraint" compare="LT"
  tokenize="word">LT</joiner>
 <joiner strength="50" apply="constraint" compare="LE" 
  tokenize="word">LE</joiner>
 <joiner strength="50" apply="constraint" compare="GT" 
  tokenize="word">GT</joiner>
 <joiner strength="50" apply="constraint" compare="GE" 
  tokenize="word">GE</joiner>
 <joiner strength="50" apply="constraint" compare="NE" 
  tokenize="word">NE</joiner>
       </grammar>
       <transform-results apply="raw"/>
    </options>;

 let $query := cts:query(cts:parse("in-depth look",$options))
  let $searchresult := cts:search(fn:doc()//book,$query)
  for $each in $searchresult 
    return $each/author

これにより、Search:search の使用を避けてこのルートをたどる必要がある Search:search よりもスリムな結果が得られます。これにより、柔軟性が大幅に向上し、結果セットもスリムになります。

于 2015-03-23T13:14:47.300 に答える