การค้นหาคุณสมบัติ Marklogic - อาร์เรย์องค์ประกอบ XML

นี่คือไฟล์คุณสมบัติของเอกสารใน Marklogic

<?xml version="1.0" encoding="UTF-8"?>
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
  <type type="string" xmlns="http://marklogic.com/xdmp/json/basic">document</type>
  <project type="string" xmlns="http://marklogic.com/xdmp/json/basic">Eagle</project>
  <fileroom type="string" xmlns="http://marklogic.com/xdmp/json/basic">Fileroom3</fileroom>
  <documentTitle type="string" xmlns="http://marklogic.com/xdmp/json/basic">HadoopOperations</documentTitle>
  <uploadDate type="string" xmlns="http://marklogic.com/xdmp/json/basic">2015-08-21T12:45:19.138Z</uploadDate>
  <lastModified type="string" xmlns="http://marklogic.com/xdmp/json/basic">2015-08-21T12:45:19.138Z</lastModified>
  <numPages type="number" xmlns="http://marklogic.com/xdmp/json/basic">11</numPages>
  <users type="array" xmlns="http://marklogic.com/xdmp/json/basic">
    <item type="string">[email protected]</item>
    <item type="string">[email protected]</item>
  </users>
  <cpf:processing-status xmlns:cpf="http://marklogic.com/cpf">done</cpf:processing-status>
  <cpf:property-hash xmlns:cpf="http://marklogic.com/cpf">77ecfa8e87a5097e29b4d9846e131a67</cpf:property-hash>
  <cpf:last-updated xmlns:cpf="http://marklogic.com/cpf">2015-08-21T18:15:19.333+05:30</cpf:last-updated>
  <cpf:state xmlns:cpf="http://marklogic.com/cpf">http://marklogic.com/states/converted</cpf:state>
  <lnk:link from="/Eagle/Fileroom3/HadoopOperations_pdf_parts/" to="/Eagle/Fileroom3/HadoopOperations.pdf" rel="source" rev="conversion" strength="strong" xmlns:lnk="http://marklogic.com/cpf/links"/>
  <lnk:link from="/Eagle/Fileroom3/HadoopOperations_pdf.xhtml" to="/Eagle/Fileroom3/HadoopOperations.pdf" rel="source" rev="conversion" strength="strong" xmlns:lnk="http://marklogic.com/cpf/links"/>
  <cpf:self xmlns:cpf="http://marklogic.com/cpf">/Eagle/Fileroom3/HadoopOperations.pdf</cpf:self>
  <prop:last-modified>2015-08-21T18:15:23+05:30</prop:last-modified>
</prop:properties>

ฉันต้องการเขียนแบบสอบถามโดยต้องค้นหาเอกสารที่คุณสมบัติ users มี "[email protected]"

db.documents.query(
        qb.where(
                qb.directory(directories),
                qb.propertiesFragment(
                        qb.value(
                                qb.element(
                                        qb.qname("http://marklogic.com/xdmp/json/basic", "users")
                                ),
                                qb.term("admin.merrill.com")
                        )
                )
        ).withOptions({
            queryPlan: true,
            metrics:true,
            debug:true})
).result(function(response){
    console.log(response);
});

เอาท์พุท:

    [ { 'snippet-format': 'snippet',
    total: 0,
    start: 1,
    'page-length': 10,
    results: [],
    plan: { 'query-plan': [Object] },
    report: '(cts:search(fn:collection(), cts:and-query((cts:directory-query("/Eagle/Fileroom1/", "1"), cts:properties-fragment-query(cts:element-value-query(fn:QName("http://marklogic.com/xdmp/json/basic","users"), "admin.merrill.com", ("lang=en"), 1))), ()), ("unfiltered",cts:score-order("descending")), 1))[1 to 10]',
    metrics: 
     { 'query-resolution-time': 'PT0.015S',
       'snippet-resolution-time': 'PT0S',
       'total-time': 'PT0.172S' } } ]

แต่ได้รับอาร์เรย์ว่าง โปรดช่วยแก้ไขคำถามนี้


person Sangharsh Agarwal    schedule 22.08.2015    source แหล่งที่มา


คำตอบ (2)


คุณกำลังค้นหา admin.merrill.com ขณะที่คุณบอกว่าคุณต้องการค้นหา [email protected] ถัดจากนั้น คุณกำลังค้นหาองค์ประกอบ jbasic:users แต่ด้วยวิธีการของคุณ คุณจะค้นหาค่าที่ตรงกับค่าสตริงทั้งหมดขององค์ประกอบนั้น ซึ่งรวมถึงที่อยู่อีเมลหลายแห่ง

ฉันอยากจะแนะนำให้เพิ่มดัชนีช่วงเส้นทางสำหรับ jbasic:users/jbasic:item (อย่าลืมเพิ่มเนมสเปซด้วย) และใช้สำหรับการจับคู่ คุณจะต้องสลับไปใช้แบบสอบถามช่วงเส้นทางเพื่อใช้ประโยชน์จากดัชนี

นอกจากนี้ยังสามารถช่วยให้คุณปรับปรุงประสิทธิภาพได้อีกด้วย การสืบค้นแบบช่วงมักจะทำงานได้ดีกว่าการสืบค้นแบบค่า

ฮ!

person grtjn    schedule 23.08.2015

ฉันเชื่อว่ามันเป็น qb.properties() และ ไม่ qb.propertiesFragment()

ที่มา: https://docs.marklogic.com/8.0/guide/node-dev/search

person David Ennis    schedule 22.08.2015