2012-11-05 15 views
5

मैं दस्तावेज़ों के दस्तावेज़ गुणों को खोजना चाहता हूं। मेरे पास केवल मार्कलॉग में लोड किए गए दस्तावेज़ हैं और कोई एक्सएमएल फाइल नहीं है। मैंने सामग्री प्रसंस्करण बंद कर दिया है। अब मैं एक मेटाडाटा (xdmp:document-properties(uri) में मौजूद)दस्तावेज़ गुणों में कैसे खोजें?

मैं एक दस्तावेज़ में निम्नलिखित गुण होते हैं के लिए खोज करना चाहते हैं: -

<?xml version="1.0" encoding="UTF-8"?> 
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property"> 
    <uploaded>true</uploaded> 
    <OntologyResourceTypeValue>DOCUMENT</OntologyResourceTypeValue> 
    <content-type>application/pdf</content-type> 
    <filter-capabilities>text subfiles HD-HTML</filter-capabilities> 
    <CreationDate>2002/12/05 09:44:29Z</CreationDate> 
    <ModDate>2002/12/05 12:02:27+02'00'</ModDate> 
    <Producer>Acrobat Distiller 5.0 (Windows)</Producer> 
    <Author>Administrator</Author> 
    <Creator>PScript5.dll Version 5.2</Creator> 
</prop:properties> 

अब मैं केवल नहीं अन्य संपत्तियों के लेखक के लिए खोज करना चाहते हैं। अगर मैं search:search("Administrator") का उपयोग कर रहा हूं तो यह पूरे दस्तावेज़ में इस शब्द की तलाश में है। लेकिन, मैं केवल दस्तावेज़ गुणों में लेखक टैग के लिए खोजना चाहता हूं। इसी तरह मैं अन्य गुणों में भी खोजना चाहता हूं।

मैं भी इस की कोशिश की है: -

let $options := <options xmlns="http://marklogic.com/appservices/search"> 
          <constraint name="author"> 
         <properties name="prop:Author"/> 
         </constraint> 
        </options> 
    let $results := search:search("author:Administrator", $options, 1, 10) 
    return 
    $results 

लेकिन, यह काम नहीं करता। कृपया मदद करे।

उत्तर

0

मुझे विश्वास है कि आपको खोजने योग्य अभिव्यक्ति सेट करने की भी आवश्यकता होगी। इस विकल्प को जोड़ने का प्रयास करें:

<searchable-expression>xdmp:document-properties()</searchable-expression> 
0

Fwiw, गुणों को प्राप्त करने के लिए एक XPath अक्ष भी है।

property::

0

एक गुण बाधा के साथ इस मुद्दे है कि यह केवल टुकड़ा गुंजाइश बदलता है, और एक नाम विशेषता को स्वीकार नहीं करता सिर्फ एक संपत्ति के लिए खोज विवश करने के लिए है। यदि आप <return-query>true</return-query> जोड़ते हैं तो आप देखेंगे कि परिणामी क्वेरी क्या होगी।

वहाँ कुछ ही विकल्प हैं .. हालांकि

पहले विकल्प <fragment-scope>properties</fragment-scope> उपयोग करने के लिए है। आप इसे सभी स्तर की बाधाओं पर लागू करने के लिए शीर्ष स्तर पर और विशेष बाधाओं को प्रभावित करने के लिए प्रति बाधा का भी उपयोग कर सकते हैं। यह दस्तावेजों के टुकड़ों के बजाय, गुणों के टुकड़ों पर चलाने के लिए खोज क्वेरी को मजबूर करने का एक अपेक्षाकृत आसान तरीका है। नीचे की तरफ यह है कि यह खोज मैचों, उर्फ ​​स्निपेट को प्रभावित नहीं करेगा।

स्निपेट को प्रभावित करने के लिए, आप @mblakele का सुझाव देने से बेहतर होते हैं, और खोजने योग्य अभिव्यक्ति का उपयोग करते हैं: <searchable-expression>xdmp:document-properties()</searchable-expression>। इससे वास्तव में दोनों स्निपेट और खोज क्वेरी प्रभावित होंगी, इसलिए इसका उपयोग करने से आपको खोज स्निपेट मिलेंगे, और क्वेरी गुणों पर क्वेरी चलती हैं। लेखक बाधा अभी भी आपकी लेखक संपत्ति तक ही सीमित नहीं है।

गुणों के टुकड़ों पर चलने के बाद, एक विशेष संपत्ति को अपनी खोज सीमित करना वास्तव में बहुत सीधी-आगे है। यह किसी अन्य के रूप में सिर्फ एक तत्व है। उस कार्य को करने के लिए तत्व शब्द, मान या श्रेणी बाधा का उपयोग करें।

कुछ कोड नीचे से ऊपर वर्णन करने के लिए:

xquery version "1.0-ml"; 

import module namespace search = "http://marklogic.com/appservices/search" 
    at "/MarkLogic/appservices/search/search.xqy"; 

(: original approach :) 
let $options1 := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <constraint name="author"> 
     <properties name="prop:Author"/> 
    </constraint> 
    <return-query>true</return-query> 
    </options> 
let $results1 := search:search("author:Administrator", $options1, 1, 1) 

(: using fragment-scope :) 
let $options2 := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <fragment-scope>properties</fragment-scope> 
    <constraint name="author"> 
     <properties name="prop:Author"/> 
    </constraint> 
    <return-query>true</return-query> 
    </options> 
let $results2 := search:search("author:Administrator", $options2, 1, 1) 

(: using searchable-expression :) 
let $options3 := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <searchable-expression>xdmp:document-properties()</searchable-expression> 
    <constraint name="author"> 
     <properties name="prop:Author"/> 
    </constraint> 
    <return-query>true</return-query> 
    </options> 
let $results3 := search:search("author:Administrator", $options3, 1, 1) 

(: using searchable-expression with an element word constraint :) 
let $options4 := 
    <options xmlns="http://marklogic.com/appservices/search"> 
    <searchable-expression>xdmp:document-properties()</searchable-expression> 
    <constraint name="author"> 
     <word> 
     <element name="Author" ns="http://marklogic.com/xdmp/property"/> 
     </word> 
    </constraint> 
    <return-query>true</return-query> 
    </options> 
let $results4 := search:search("author:Administrator", $options4, 1, 1) 

return (
    $results1, 
    $results2, 
    $results3, 
    $results4 
) 

चौथा उदाहरण आप परिणाम आप देख रहे थे देना चाहिए।

एचटीएच!

संबंधित मुद्दे