Найти в текстовом документе на сервере Marklogic и получить результат, основанный на поиске Паттена - PullRequest
0 голосов
/ 09 января 2019

Я загрузил текстовый документ на сервер Marklogic с названием коллекций («вызов-возврат»). Ниже текстовый документ:

    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,884 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : -7703835814759006134 - Returning from WorkflowContentDao.deleteCompletedOrFailedContentList(..) Execution time: 16 ms
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,900 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : -2561765194895194936 - Calling WorkflowContentDao.getWaitingForContentListToProcess(..) with parameters FTP
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,900 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : -2561765194895194936 - Returning from WorkflowContentDao.getWaitingForContentListToProcess(..) Execution time: 0 ms
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,915 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : -2041334620910360341 - Calling WorkflowContentDao.getFTPWaitProcessType(..) with parameters ftp://10.103.100.43:21/VARIANTGENERATION/INPUT/30357186.pdf
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,915 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : -2041334620910360341 - Returning from WorkflowContentDao.getFTPWaitProcessType(..) Execution time: 0 ms
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,915 com.innodata.bsi.consumer.WorkflowContentConsumer processWorkflowContent - processWorkflowContent workflow content task: DPC-CENELEC-PUBLISH 01-7915592210 VARIANT_GENERATION
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,915 com.innodata.bsi.schedule.task.ProcessWorkflowContent failWorkflowContentTask - Failing workflow content task using scheduler because its exceeded 30 min since created  DPC-CENELEC-PUBLISH 01-7915592210 VARIANT_GENERATION
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,931 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : 8235148762900748472 - Calling WorkflowContentDao.setPickedBy(..) with parameters com.innodata.bsi.domain.WorkflowContentInfo@5f7839bd
    [INFO] [workflowContentListner-1] 2019-01-03 00:00:59,931 com.innodata.bsi.interceptors.MethodLoggingAspect logTimeMethod - Thread Id-25 : 8235148762900748472 - Returning from WorkflowContentDao.setPickedBy(..) Execution time: 0 ms

Я ищу в этом документе ' 2561765194895194936 - Позвонив по номеру ', номер может быть любым. Итак, я написал ниже запрос:

 let $search :=cts:search(collection("calling-returning"), cts:word-query(" - 
 Calling"))
 return $search

Но он возвращает полный документ. Я хочу только ниже тип результата:

  2561765194895194936 - Calling
  256176519489514568 - Calling
  568651948951566 - Calling

1 Ответ

0 голосов
/ 09 января 2019

Единица поиска и поиска в MarkLogic - это документ. Если вы хотите искать строки отдельно, они должны быть отдельными документами. Если у вас есть соответствующий документ, и если вы хотите извлечь из него совпадающие строки, вам нужно будет разбить документ на строки и выполнить сопоставление для каждой отдельной строки, например, tokenize($doc,"\n")[cts:contains(text {.}, $query)]

Это не будет очень эффективным, и вам может быть лучше предварительно обработать текстовый документ, чтобы добавить некоторую разметку (т.е. корневой элемент и элемент строки вокруг каждой строки), тогда, по крайней мере, вам не нужно делать символизацию всего этого, хотя вам все равно придется пройтись по всем вещам в соответствии с каждой строкой после факта: $doc//line[cts:contains(., $query)]

...