Медленная гармонизация при использовании подстановочного знака в MarkLogic
Я согласовываю документы в 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 ответ
Взгляните на рекомендуемые параметры индекса подстановочных знаков MarkLogic. Я бы тоже поставил cts.search
позвоните, чтобы бежать как нефильтрованный, как только вы выполнили рекомендации.