Медленная гармонизация при использовании подстановочного знака в MarkLogic - PullRequest
0 голосов
/ 03 октября 2018

Я согласовываю документы в MarkLogic, которые завершаются в течение 26 минут без выполнения фрагментов кода подстановки (закомментировано).Когда я выполняю приведенный ниже код, время гармонизации завершается за гораздо более длительное время: 1 час и 50 минут .

Этот фрагмент кода является моей попыткой перевода приведенного ниже кода SQL:

DECLARE @GETPRODLOSS decimal(18,2)
IF @ASSETNUMBER = NULL
    SET @GETPRODLOSS = NULL
ELSE
    SELECT @GETPRODLOSS = CONVERT(decimal(18,2), SUM(GLU/100)) 
        FROM AccountLedgerTable 
        WHERE GLDCT = 'MU' AND 
        GLSBLT = 'W' AND 
        LTRIM(SUBSTRING(GLASID,2,25)) LIKE concat('%',@assetNumber) AND 
        GLSBL LIKE concat('%',@workOrder) 
        GROUP BY GLANI
    RETURN(@GETPRODLOSS)
END

Интересно, почему это занимает так много времени, чтобы выполнить.Ниже приведены эквивалентные фрагменты кода JavaScript для этого в MarkLogic:

function getAffectedProduction(assetNumber, workOrder) {
  let accountLedger =  cts.search(cts.andQuery([
     cts.collectionQuery("JDEdwards"),
     cts.collectionQuery("JDEAccountLedger"),
     cts.elementWordQuery(fn.QName("http://www.example.com/ads/JDEdwards/document","GLDCT"), "MU"),
     cts.elementWordQuery(fn.QName("http://www.example.com/ads/JDEdwards/document","GLSBLT"), 'W'),
     cts.elementWordQuery(fn.QName("http://www.example.com/ads/JDEdwards/document","GLASID"), fn.concat("*", assetNumber), "wildcarded"),
     cts.elementWordQuery(fn.QName("http://www.example.com/ads/JDEdwards/document","GLSBL"), fn.concat("*", workOrder), "wildcarded")
   ]))


   let affectedProduction = new Number();

   if(fn.count(accountLedger) <= 0) return "";

   affectedProduction = 0;

   let docXML = new String();
   for (const item of accountLedger) {
    
     affectedProduction += fn.number(`${fn.normalizeSpace(hl.elementText(item, "GLU"))}`);

   }

   return fn.string(fn.abs(affectedProduction/100));

 }

Примечание: у меня есть индекс диапазона настроек для элементов GLDCT, GLSBLT, GLASID, GLSBL

Что-то не так?с моим кодом?Или есть настройка интерфейса администратора, которую нужно включить при использовании подстановочных знаков?

1 Ответ

0 голосов
/ 03 октября 2018

Посмотрите на рекомендуемые MarkLogic рекомендуемые параметры подстановочного индекса .Я также установил бы, что ваш вызов cts.search будет работать без фильтрации после того, как вы выполните рекомендации.

...