2012-05-18 2 views
2

Marklogic 데이터베이스에는 약 20 개의 lacs 문서가 있습니다. 검색 응용 프로그램에서 페이지 매김을위한 총 문서 수를 원합니다. 합계를 얻기 위해 나는 $ 쿼리 cts:and-query에 결합 된 다양한 쿼리의 조합이Marklogic 데이터베이스에서 총 문서 수를 얻는 방법은 무엇입니까?

xdmp:estimate(cts:search(doc(), $query)) 

을 사용하고 있습니다. 그러나 나는 정확한 합계를 얻지 못하고있다. $ query가 비어 있으면 데이터베이스에있는 총 문서 수보다 훨씬 많은 수를 표시합니다. 사용시

xdmp:estimate(doc()) 

정확한 총계를 보여 주지만 쿼리에 따라 변경되지 않는 정적 총계입니다. 특정 쿼리에 대한 응답으로 리턴 된 결과에 따라 합계를 원하므로 $ query를 인수로 전달했지만 정확한 합계가 표시되지 않습니다. fn:count()은 정확한 합계를 표시하지만 문서 수가 약 20 개이면 fn:count()xdmp:estimate()보다 느리기 때문에 fn:count()이 작동하지 않습니다.

사용자가 입력 한 검색어에 대한 응답으로 반환 된 정확한 총 문서 수를 알려주십시오.

답변

9

지금이 테스트 케이스를 시도 http://resources.marklogic.com/library/media/inside-marklogic

의 아키텍처 백서를 읽어 시작, 여기에 무슨 일이 일어나고 있는지 이해하기 데이터 베이스. 두 번째 표현식은 문서 조각의 수를 데이터베이스에 계산합니다. 결과가 다른 경우 조각 루트 또는 조각 부모가 구성되어있을 수 있습니다. 일부 특수 문서는 또한 추가 조각을 만듭니다 : 나는 철자 사전과 시소러스 문서가 이것을한다고 생각합니다.

추정치를 XML 문서 루트로 제한하려면 검색 가능한 표현식에 문서 루트 QName을 지정하거나 루트 요소 이름을 염려하지 않으면 /*을 사용하십시오. 단지 당신이 계산 할 문서에 나타나는의 QName을 지정하는 쿼리 인수 :

xdmp:estimate(cts:search(/*,())) 

또한 CTS를 사용할 수 있습니다.

1

질문이 이해가 가지 않습니다. 데이터베이스에있는 총 문서 수 또는 검색과 일치하는 총 문서 수를 원하십니까?

xdmp:estimate은 올바른 방법이지만 추정입니다. 견적에 사용 된 쿼리가 인덱스에서 완전히 해결 될 수 있다면 견적은 100 % 정확합니다. 그러나 쿼리를 인덱스에서 완전히 확인할 수없는 경우 (필터링 필요) 예상치가 어느 정도 벗어납니다. xdmp:estimate은 색인을 사용하여 계산할 수 있기 때문입니다. fn:count(cts:search(doc(), $query)) ~ xdmp:estimate(cts:search(doc(), $query))을 비교하십시오. 주어진 쿼리에 대한 결과가 현저히 다른 경우 해당 쿼리를 지원하기 위해 추가 인덱싱을 켜거나 차이를두고 살 필요가 있습니다.

xdmp:estimate(doc()), 
xdmp:estimate(cts:search(doc(),())) 

첫 번째 표현은에서 문서의 수를 계산합니다 :

관련 문제