2017-11-13 11 views
0

Markgy에있는 문서 XML을 두 번 이상 두 번 이상 찾으려고합니다. <document>.특정 요소가 Marklogic에서 여러 번 나타날 때 XML 만 검색합니다.

<root> 
    <documents> 
     <document> 
      <id>3</id> 
      <name>roy</name> 
      <otherData></otherData> 
     </document> 
    </documents> 
</root> 

내가 존재 또는 최소를 검색 할 수 있습니다 : 나는 다음과 같은 구조 인 XMLS를 검색하지 않으

<root> 
    <documents> 
     <document> 
      <id>1</id> 
      <name>roy</name> 
      <otherData></otherData> 
     </document> 
     <document> 
      <id>2</id> 
      <name>roy</name> 
      <otherData></otherData> 
     </document> 
     .... 
     ... 
     .. 
     . 
     <document> 
      <id>3</id> 
      <name>roy</name> 
      <otherData></otherData> 
     </document> 

    </documents> 
</root> 

: 하나의 문서 XML의 구조는 다음과 내가 검색 할 하나는 xs:QName("document")element-query을 사용했지만 둘 이상의 검색 방법에 대해서는 잘 모릅니다.

도움을 주시면 감사하겠습니다.

답변

2

이 작업을 수행하는 실제 간단한 방법은 MarkLogic에서 잘 확장되지 않습니다. 가장 쉬운 방법은 문서를 풍부하게하고 <documents> 요소에 개수 속성을 추가하고 문서를 터치 할 때마다 최신 상태로 유지하는 것입니다. 그런 다음 count 속성에서 직선 범위 인덱스를 수행 한 후 사용자가 직접 얻은 결과를 얻을 수 있습니다.

HTH!

+1

huh? xquery 태그 주위를 자주 보았는데 너는 말도 안 듣는다고 생각하기에 충분했지만 솔직히 놀랐다. ML에서 이것이 불가능한 이유를 설명해 주시겠습니까? 내게는'count (/ document)> 1'을 포함하는 간단한 XQuery가 충분해야한다. – dirkk

+1

포인트가 있습니다. 실제로 XPath를 사용할 수 있습니다. 포스터는 검색하는 것에 대해 이야기하고 있었고 검색 쿼리에서 동일한 것을 표현할 수는 없습니다. 또한 검색은 일반적으로 MarkLogic의 XPath 문보다 훨씬 빠릅니다. 필터가 실행되고 순서가 XPath에 의해 지정되기 때문입니다. – grtjn

+0

답변을 수정했습니다. – grtjn

1

나는 대답을 좋아하지만 cts : search와 XPATH를 사용하여 다르게하려고 시도했다. XPATH 만 사용하는 것보다 빠릅니다.

xquery version "1.0-ml"; 
let $query1:= cts:element-query(xs:QName("document"),cts:and-query(())), 
$query2:= cts:element-query(xs:QName("documents"),$query1) 
return 
for $doc in cts:search(collection(),$query2,("unfiltered")) where count($doc/root/documents/document) > 1 return $doc