내가 1 개 백만 문서까지 우리는 검색을 수행하는 Java 클라이언트 API 및 구조화 된 쿼리를 사용하는 2시간MarkLogic 쿼리 Peformance
에서 가져와야하는 응용 프로그램 작업을하고 구조화. 그러나 쿼리가 여전히 느립니다.
코드는 다음과 같습니다 :
def fetchPostMessages(dbParam: DbParam): Page = {
val queryManager = dbClient.newQueryManager()
val sqb: StructuredQueryBuilder = queryManager.newStructuredQueryBuilder()
log.info(s "Fetching post messages from database for params: {}", dbParam)
val modifiedQueryDef = dbParam.param.map {
param => {
sqb.and(
sqb.word(sqb.jsonProperty(status), toBeReported),
sqb.word(sqb.jsonProperty(dataCategory), "dataCategory1"),
sqb.range(sqb.jsonProperty(creationDate), marklogicDateFormat.name, Operator.LE, DateUtil.printFpmlDateTime(param.messagesTime)))
}
}.getOrElse(sqb.and(sqb.word(sqb.jsonProperty(status.name), toBeReported.name)))
modifiedQueryDef.setCollections(XmlConstants.ItracMessageTypes.OUTPUT_MESSAGE.name)
modifiedQueryDef.setOptionsName(sortOption)
search(modifiedQueryDef, dbParam.pageNum, dbParam.batchSize)
}
private def search(queryDef: QueryDefinition, startIndex: Int, batchSize: Int): Page = {
val dataList: ListBuffer[Document] = new ListBuffer()
val jsonDocManager = dbClient.newJSONDocumentManager()
jsonDocManager.setMetadataCategories(Metadata.ALL)
jsonDocManager.setPageLength(
if (batchSize < pageLength) batchSize
else pageLength)
val documentPage = jsonDocManager.search(queryDef, startIndex);
dataList.++ = (extractContent(documentPage))
val totalSize = documentPage.getTotalSize
log.info(s "Total documents to be reported : ${totalSize}")
var pageSize = documentPage.getPageSize
while (pageSize < batchSize && pageSize <= totalSize) {
if (batchSize - pageSize < pageSize)
jsonDocManager.setPageLength(batchSize - pageSize)
var newDocPage = jsonDocManager.search(queryDef, pageSize + 1)
dataList.++ = (extractContent(newDocPage))
pageSize = pageSize + newDocPage.getPageSize
}
log.info("Total messages fetched are : {}", dataList.size)
Page(startIndex, totalSize - batchSize, dataList.to[collection.immutable.Seq])
}
정렬 옵션은 다음과 같습니다 데이터베이스에
<search:options xmlns:search="http://marklogic.com/appservices/search">
<search:sort-order type="xs:string" direction="ascending">
<search:json-property>subdomLvl1</search:json-property>
</search:sort-order>
<search:sort-order type="xs:string" direction="ascending">
<search:json-property>trdId</search:json-property>
</search:sort-order>
<search:sort-order type="xs:string" direction="ascending">
<search:json-property>validStartDate</search:json-property>
</search:sort-order>
<search:sort-order type="xs:string" direction="ascending">
<search:json-property>ver</search:json-property>
</search:sort-order>
<search:sort-order type="xs:string" direction="ascending">
<search:json-property>reportStatus</search:json-property>
</search:sort-order>
</search:options>
인덱싱은 다음과 같습니다 :
요소 범위 인덱스는 동안이다 -, dataCategory 및 상태 creationDate 및 모든 정렬 옵션에 대해