2013-08-28 4 views
5

मैं निम्नलिखित MarkLogic क्वेरी है कि, जब क्वेरी कंसोल में चलाने के लिए, मुझे मेरे प्रणाली उपयोगकर्ता के जो व्यवस्थापक विशेषाधिकारों को पुनः प्राप्त करने की अनुमति देता है:दस्तावेज़ XPath MarkLogic के जावा खोज एपीआई बनाम XQuery/XSLT एपीआई के साथ खोज

xquery version "1.0-ml"; 
import schema namespace bfa="http://bitfood.org/auth" at "schema/auth/bitfood-auth.xsd"; 
cts:search(/bfa:AppUser[bfa:appAccess/@appRole = "ROLE_SYS_ADMIN"], cts:and-query(())) 

मेरी अज्ञानता को क्षमा करें, लेकिन जावा क्लाइंट एपीआई का उपयोग करके इस क्वेरी को कार्यान्वित करना संभव है?

मुझे पता है कि मैं एक्ससीसी के माध्यम से कच्ची क्वेरी का उपयोग कर सकता हूं लेकिन मैं जितना संभव हो उससे बचने की कोशिश कर रहा हूं।

मैं जावा क्लाइंट एपीआई के दस्तावेज के माध्यम से खुदाई कर रहा हूं, दुर्भाग्य से, अन्य खोज विधियों के साथ संक्षेप में सौदों और कुछ भी संकेत नहीं मिला है कि यह संभव है।

अपडेट 1: दोस्तों, मुझे लगता है कि मैंने यहां एक शोस्टॉपर मारा है।

this question के अनुसार, जावा क्लाइंट एपीआई की क्वेरी विकल्प बिल्डिंग सुविधाओं को बहिष्कृत के रूप में चिह्नित किया गया है।

@Ehennum एक विकल्प सुझाता है जो या तो एक्सएमएल या जेएसओएन क्वेरी विकल्प का उपयोग करता है। मैं एक्सएमएल बनाने के लिए JAXB, JDOM, फ़ाइलों या किसी अन्य उपकरण का उपयोग कर सकते

String xmlOptions = 
    "<search:options "+ 
     "xmlns:search='http://marklogic.com/appservices/search'>"+ 
     "<search:constraint name='industry'>"+ 
     "<search:value>"+ 
      "<search:element name='industry' ns=''/>"+ 
     "</search:value>"+ 
     "</search:constraint>"+ 
    "</search:options>"; 

दी है, लेकिन मेरी निजी राय है कि हम अभी भी storing queries in resource files in the code को सहारा ले रहे हैं, जो है: हालांकि, इस तरह क्वेरी विकल्प विनिर्देशों still essentially defined as raw Strings in the code हैं खुद में एक बुरी चीज नहीं है, लेकिन सावधानीपूर्वक विचार किए बिना कोड रखरखाव दुःस्वप्न का कारण बन सकता है।

इसके अलावा, यह विकल्प कि सर्वर पर आरईएसटी के माध्यम से इन विकल्पों को जारी रखने की आवश्यकता है, यदि यह अनिवार्य है तो विकल्पों की एक और परत पेश करती है क्योंकि विकल्पों को हर डेटाबेस इंस्टेंस के साथ सिंक्रनाइज़ करने की आवश्यकता हो सकती है जो कि काम करने के लिए है एक कोड आधार।

तो, यदि मार्कलॉगिक देव सुन रहे हैं, तो मुझे लगता है कि जावा क्लाइंट एपीआई परिपक्व या दस्तावेज नहीं है जैसा कि मैंने उम्मीद की थी।

1) मैं स्ट्रिंग फाइलों में मेरी XCC प्रश्नों को हार्डकोड और डेटा है कि मैं जरूरत डालें और एक XCC सत्र के माध्यम से पुनः प्राप्त करने के पैरामीटर प्लेसहोल्डर का उपयोग करने की कोशिश कर सकते:

मैं दो विकल्प अब तक की है। या।

2) अगर वहाँ http://marklogic.com/appservices/search नाम स्थान के लिए किसी भी XSD फ़ाइलें हैं देखें और व्यवस्था "मापदंड" वर्गों a la Hibernate या QueryDSL जो, दुर्भाग्य से मुझे कहना पड़ेगा किसी प्रकार का निर्माण करने के लिए में उन लोगों से स्थिर JAXB वस्तुओं को बनाने, पहले से ही के कुछ स्तर का समर्थन करता है MongoDB पूछताछ।

दोस्तों, वास्तव में, कुछ प्रकार की धाराप्रवाह पूछताछ सुविधाओं जैसे कि QueryDSL को मार्कलॉगिक में लाएं और Rube Goldberg querying machine से छुटकारा पाएं।

अद्यतन 2: ऐसा लगता है कि यह एमएल 7 में संबोधित किया जा सकता है। इसके लिए आगे देख रहे हैं।

धन्यवाद!

+0

दोस्तों, नीचे वोट क्यों? क्या मैंने अपना शोध नहीं किया? मैं यह नहीं दिखा रहा हूं कि न्यूनतम कोड बेहतर है? श्वास ... –

उत्तर

4

पृष्ठभूमि: खोज

आप खोज API में इस क्वेरी को व्यक्त कर सकते हैं: जावा एपीआई REST API पर एक परत खोज API पर एक परत सीटीएस पर एक परत है है।

जावा API का उपयोग कर के लिए क्वेरी में पहले पैरामीटर के लिए एक खोज अभिव्यक्ति का प्रयोग करें, तो आप खोज कर सकते हैं RawCombinedQueryDefinition के रूप में क्वेरी विकल्प और संरचित क्वेरी का उपयोग करना।

XPath सुविधाजनक हो सकता है, यह एक है appAccess/@ "ROLE_SYS_ADMIN" की appRole: बीएफए पर एक मूल्य बाधा क्वेरी युक्त AppUser:

सब कहा, तुम बस भी पर बीएफए एक तत्व-क्वेरी की खोज कर सकता है डेटाबेस की पूर्ण शक्ति और लचीलापन को समझने के लिए क्वेरी अभिव्यक्तियों में बातचीत करने के लिए अच्छा विचार। 1

अद्यतन:

कुछ बातें

विचार करने के लिए:

  • खोज API में एक क्वेरी के दो भाग हैं: क्वेरी (या तो गूगल शैली स्ट्रिंग खोज के साथ या JSON के साथ व्यक्त या एक्सएमएल संरचित खोज) और क्वेरी विकल्प। संरचितQuerybuilder संरचित खोज बनाता है। QueryOptionsBuilder ने केवल क्वेरी विकल्प बनाए हैं।

  • एमएल 6.0-3 में, आरईएसटी एपीआई ने संयुक्त खोज के लिए समर्थन प्रस्तुत किया, जो एक ही अनुरोध में दोनों भागों को प्रदान करता है। जावा एपीआई ने RawCombinedQueryDefinition क्लास के माध्यम से ऐसे अनुरोधों के लिए समर्थन जोड़ा।

  • एमएल 7 संरचित खोज के साथ क्वेरी विकल्पों की आवश्यकता को कम करने या समाप्त करने के लिए संरचित खोज का विस्तार कर रहा है। संरचित खोज की नई विशेषताओं का समर्थन करने के लिए एमएल 7 में संरचितQueryBuilder को बढ़ाया गया है। एमएल 7 में, आप क्वेरी उदाहरण विकल्पों की आवश्यकता के बिना पूरी तरह से संरचितQueryBuilder में अपनी उदाहरण क्वेरी लिखने में सक्षम होंगे।

  • जब हमने क्वेरीऑप्शन बिल्डर के साथ क्वेरी विकल्प बनाने और जेडीओएम या एक्सओएम के साथ कोड की तुलना की तुलना की, तो निर्माता में अधिक LOC लाभ देखना मुश्किल था।

  • आपको स्ट्रिंग में क्वेरी विकल्प हार्डकोड करने की आवश्यकता नहीं है। चिंताओं को अलग करने के लिए, आप फ़ाइल से या कई अन्य स्रोतों से जेएसओएन या एक्सएमएल क्वेरी विकल्प पढ़ सकते हैं। (कृपया http://docs.marklogic.com/javadoc/client/com/marklogic/client/io/marker/QueryOptionsReadHandle.html मार्कर इंटरफ़ेस के कार्यान्वयन देखें।)

  • प्रश्न विकल्प निष्पादन योग्य कोड के बजाय घोषणा प्रदान करते हैं। समांतर एसपीएल फाइलों के बजाय वसंत विन्यास फाइलों के साथ होगा।

Btw, जावा वर्गों के स्रोत वाली डिजाइन के लिए अच्छा है, जबकि JAXB, JAXB एक जटिल XML स्कीमा के स्रोत वाली डिजाइन के लिए काफी दर्द हो सकता है। खोज स्कीमा एक्सएमएल स्कीमा की शक्तिशाली क्षमताओं का लाभ उठाती है। जब हमने इस मार्ग की खोज की, तो हमने निष्कर्ष निकाला कि जेएक्सबी क्वेरी विकल्पों में इंटरफेस प्रदान करने में मदद नहीं करेगा।

+0

धन्यवाद। मैं बहुत अधिक दर्द के बिना एक्सएमएल क्वेरी विकल्पों को उत्पन्न करने का एक तरीका खोजने की कोशिश कर रहा हूं। –

+0

नोट किया गया।मुझे लगता है कि अब मुझे बुलेट काटने और लगातार एक्सएमएल क्वेरी विकल्पों के साथ जाना होगा। मैं उस आखिरी बिंदु पर भी सहमत हूं, जेएक्सबी जेनरेटेड क्लास का एक गुच्छा बंडल कर रहा हूं ताकि वे अपने संबंधित स्कीमा को दर्पण कर सकें, एप्लिकेशन डेवलपर्स के लिए कुछ बेहतर छोड़ दिया गया है। मैं एमएल 7 में 'संरचितQuerybuilder' के उन्नत संस्करण की भी प्रतीक्षा करता हूं। उम्मीद है कि यह एक और सहज ज्ञान युक्त पूछताछ तंत्र प्रदान करेगा। धन्यवाद! –

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