Internal Server Error due to long XQuery duration (MarkLogic)Xquery on MarkLogic using ORMarkLogic Search XqueryHow to parse “>” and “<” in Xquery in Marklogic?MarkLogic xquery errorsMarklogic xquery gives different result on different serversMarklogic collate sequence in XQueryMarklogic, XqueryServer 500 error on a MarkLogic serverMarkLogic XqueryMarklogic xquery is not evaluating in html

Why are Tucker and Malcolm not dead?

What is my malfunctioning AI harvesting from humans?

How can Radagast come across Gandalf and Thorin's company?

AsyncDictionary - Can you break thread safety?

Help me aout with this summation

How to remove threat that antivirus program indicates has to be manually deleted?

Why are Gatwick's runways too close together?

Is this curved text blend possible in Illustrator?

Can a PC use the Levitate spell to avoid movement speed reduction from exhaustion?

PhD advisor lost funding, need advice

How to reduce Sinas Chinam

A torrent of foreign terms

Why I have higher ping to the VLAN interface than to other local interfaces

Loading military units into ships optimally, using backtracking

Why is the result of ('b'+'a'+ + 'a' + 'a').toLowerCase() 'banana'?

What is a good class if we remove subclasses?

TEMPO: play a (mp3) sound in animated GIF/PDF/SVG

What is the status of the F-1B engine development?

Why does the standard fingering / strumming for a D maj chord leave out the 5th string?

Visa National - No Exit Stamp From France on Return to the UK

What gave Harry Potter the idea of writing in Tom Riddle's diary?

Is it legal for a company to enter an agreement not to hire employees from another company?

80's/90's superhero cartoon with a man on fire and a man who made ice runways like Frozone

How far did Gandalf and the Balrog drop from the bridge in Moria?



Internal Server Error due to long XQuery duration (MarkLogic)


Xquery on MarkLogic using ORMarkLogic Search XqueryHow to parse “>” and “<” in Xquery in Marklogic?MarkLogic xquery errorsMarklogic xquery gives different result on different serversMarklogic collate sequence in XQueryMarklogic, XqueryServer 500 error on a MarkLogic serverMarkLogic XqueryMarklogic xquery is not evaluating in html






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I have am currently running through some queries using the Java API provided by MarkLogic. I have installed it through adding the required dependencies to my library. The connection is set up using



DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);


From here some XQueries are ran using the code shown below



ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext())
//Do something with the results



However, certain queries takes a long time to process causing an internal error.So Other then reducing the query time required, I am wondering if there is there a way to overcome this? Such as increasing of connection time limit for instance.



====Update===



Query used



xquery version "1.0-ml";

let $query-opts := /comments[fn:matches(text,".*generation.*")]

return(
$query-opts, fn:count($query-opts), xdmp:elapsed-time()
)


I know the regular expression used can be easily replaced by word-query. But for this instance I would like to just used regular expression for searching.



Example Data



<comments>
<date_commented>1998-01-14T04:32:30</date_commented>
<text>iCloud sync settings are not supposed to change after an iOS update. In the case of iOS 10.3 this was due to a bug.</text>
<uri>/comment/000000001415898</uri>
</comments>









share|improve this question


























  • Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

    – Ramachandra Reddy
    Mar 27 at 7:16











  • It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

    – WhiteSolstice
    Mar 27 at 7:30






  • 1





    Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

    – Wagner Michael
    Mar 27 at 8:00












  • Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

    – WhiteSolstice
    Mar 27 at 8:09












  • Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

    – Wagner Michael
    Mar 27 at 8:18

















1















I have am currently running through some queries using the Java API provided by MarkLogic. I have installed it through adding the required dependencies to my library. The connection is set up using



DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);


From here some XQueries are ran using the code shown below



ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext())
//Do something with the results



However, certain queries takes a long time to process causing an internal error.So Other then reducing the query time required, I am wondering if there is there a way to overcome this? Such as increasing of connection time limit for instance.



====Update===



Query used



xquery version "1.0-ml";

let $query-opts := /comments[fn:matches(text,".*generation.*")]

return(
$query-opts, fn:count($query-opts), xdmp:elapsed-time()
)


I know the regular expression used can be easily replaced by word-query. But for this instance I would like to just used regular expression for searching.



Example Data



<comments>
<date_commented>1998-01-14T04:32:30</date_commented>
<text>iCloud sync settings are not supposed to change after an iOS update. In the case of iOS 10.3 this was due to a bug.</text>
<uri>/comment/000000001415898</uri>
</comments>









share|improve this question


























  • Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

    – Ramachandra Reddy
    Mar 27 at 7:16











  • It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

    – WhiteSolstice
    Mar 27 at 7:30






  • 1





    Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

    – Wagner Michael
    Mar 27 at 8:00












  • Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

    – WhiteSolstice
    Mar 27 at 8:09












  • Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

    – Wagner Michael
    Mar 27 at 8:18













1












1








1








I have am currently running through some queries using the Java API provided by MarkLogic. I have installed it through adding the required dependencies to my library. The connection is set up using



DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);


From here some XQueries are ran using the code shown below



ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext())
//Do something with the results



However, certain queries takes a long time to process causing an internal error.So Other then reducing the query time required, I am wondering if there is there a way to overcome this? Such as increasing of connection time limit for instance.



====Update===



Query used



xquery version "1.0-ml";

let $query-opts := /comments[fn:matches(text,".*generation.*")]

return(
$query-opts, fn:count($query-opts), xdmp:elapsed-time()
)


I know the regular expression used can be easily replaced by word-query. But for this instance I would like to just used regular expression for searching.



Example Data



<comments>
<date_commented>1998-01-14T04:32:30</date_commented>
<text>iCloud sync settings are not supposed to change after an iOS update. In the case of iOS 10.3 this was due to a bug.</text>
<uri>/comment/000000001415898</uri>
</comments>









share|improve this question
















I have am currently running through some queries using the Java API provided by MarkLogic. I have installed it through adding the required dependencies to my library. The connection is set up using



DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8000, secContext, ConnectionType.DIRECT);


From here some XQueries are ran using the code shown below



ServerEvaluationCall evl = client.newServerEval().xquery(query);
EvalResultIterator evr = evl.eval();
while(evr.hasNext())
//Do something with the results



However, certain queries takes a long time to process causing an internal error.So Other then reducing the query time required, I am wondering if there is there a way to overcome this? Such as increasing of connection time limit for instance.



====Update===



Query used



xquery version "1.0-ml";

let $query-opts := /comments[fn:matches(text,".*generation.*")]

return(
$query-opts, fn:count($query-opts), xdmp:elapsed-time()
)


I know the regular expression used can be easily replaced by word-query. But for this instance I would like to just used regular expression for searching.



Example Data



<comments>
<date_commented>1998-01-14T04:32:30</date_commented>
<text>iCloud sync settings are not supposed to change after an iOS update. In the case of iOS 10.3 this was due to a bug.</text>
<uri>/comment/000000001415898</uri>
</comments>






java marklogic






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 27 at 9:03







WhiteSolstice

















asked Mar 27 at 7:09









WhiteSolsticeWhiteSolstice

1721 gold badge2 silver badges12 bronze badges




1721 gold badge2 silver badges12 bronze badges















  • Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

    – Ramachandra Reddy
    Mar 27 at 7:16











  • It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

    – WhiteSolstice
    Mar 27 at 7:30






  • 1





    Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

    – Wagner Michael
    Mar 27 at 8:00












  • Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

    – WhiteSolstice
    Mar 27 at 8:09












  • Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

    – Wagner Michael
    Mar 27 at 8:18

















  • Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

    – Ramachandra Reddy
    Mar 27 at 7:16











  • It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

    – WhiteSolstice
    Mar 27 at 7:30






  • 1





    Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

    – Wagner Michael
    Mar 27 at 8:00












  • Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

    – WhiteSolstice
    Mar 27 at 8:09












  • Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

    – Wagner Michael
    Mar 27 at 8:18
















Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

– Ramachandra Reddy
Mar 27 at 7:16





Do you have issues with both Select and Update? or Can you explain what kind of queries taking more time?

– Ramachandra Reddy
Mar 27 at 7:16













It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

– WhiteSolstice
Mar 27 at 7:30





It's a very simple query that checks for a certain word using word-query and returns the document, from there I use fn:count() to determine the # of documents. But it is counting millions of documents, which takes up a lot of time. @Ramachandra Reddy

– WhiteSolstice
Mar 27 at 7:30




1




1





Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

– Wagner Michael
Mar 27 at 8:00






Instead of fn:count() you could use xdmp:estimate which does not require loading/parsing the documents into memory and should be alot faster. docs.marklogic.com/xdmp:estimate

– Wagner Michael
Mar 27 at 8:00














Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

– WhiteSolstice
Mar 27 at 8:09






Yes i thought of using that. But the issue is xdmp:estimate counts based on index. So if say I use a path /data[some condition], it will still return me the count of all documents entries with path/data even if the results returned is only 1 document due to the condition applied. @Wagner Michael

– WhiteSolstice
Mar 27 at 8:09














Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

– Wagner Michael
Mar 27 at 8:18





Yea thats true. Can you post your query + data? You could try transforming your data so it does not have multiple nodes per fragments. So path/data is unique per fragment.

– Wagner Michael
Mar 27 at 8:18












1 Answer
1






active

oldest

votes


















4














On the basis of your provided data I'd use xdmp:estimate and a cts query.



xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))


This will search all documents in your /comments/ directory for an element text containing the word generation. As you already know, this will only use indexes and does not require loading/parsing documents.



This also will not find any false-positives because there is only one text element per document/fragment (if your shown data is correct).






share|improve this answer

























  • One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

    – ehennum
    Mar 27 at 16:32











  • Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

    – WhiteSolstice
    Mar 28 at 2:08






  • 1





    Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

    – Michael Gardner
    Mar 28 at 3:09






  • 1





    @WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

    – Wagner Michael
    Mar 28 at 7:28










Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55371598%2finternal-server-error-due-to-long-xquery-duration-marklogic%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









4














On the basis of your provided data I'd use xdmp:estimate and a cts query.



xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))


This will search all documents in your /comments/ directory for an element text containing the word generation. As you already know, this will only use indexes and does not require loading/parsing documents.



This also will not find any false-positives because there is only one text element per document/fragment (if your shown data is correct).






share|improve this answer

























  • One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

    – ehennum
    Mar 27 at 16:32











  • Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

    – WhiteSolstice
    Mar 28 at 2:08






  • 1





    Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

    – Michael Gardner
    Mar 28 at 3:09






  • 1





    @WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

    – Wagner Michael
    Mar 28 at 7:28















4














On the basis of your provided data I'd use xdmp:estimate and a cts query.



xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))


This will search all documents in your /comments/ directory for an element text containing the word generation. As you already know, this will only use indexes and does not require loading/parsing documents.



This also will not find any false-positives because there is only one text element per document/fragment (if your shown data is correct).






share|improve this answer

























  • One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

    – ehennum
    Mar 27 at 16:32











  • Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

    – WhiteSolstice
    Mar 28 at 2:08






  • 1





    Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

    – Michael Gardner
    Mar 28 at 3:09






  • 1





    @WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

    – Wagner Michael
    Mar 28 at 7:28













4












4








4







On the basis of your provided data I'd use xdmp:estimate and a cts query.



xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))


This will search all documents in your /comments/ directory for an element text containing the word generation. As you already know, this will only use indexes and does not require loading/parsing documents.



This also will not find any false-positives because there is only one text element per document/fragment (if your shown data is correct).






share|improve this answer













On the basis of your provided data I'd use xdmp:estimate and a cts query.



xdmp:estimate(cts:search(doc(), cts:and-query((
cts:directory-query('/comment/'),
cts:element-word-query(xs:QName("text"), "generation")
))))


This will search all documents in your /comments/ directory for an element text containing the word generation. As you already know, this will only use indexes and does not require loading/parsing documents.



This also will not find any false-positives because there is only one text element per document/fragment (if your shown data is correct).







share|improve this answer












share|improve this answer



share|improve this answer










answered Mar 27 at 9:26









Wagner MichaelWagner Michael

1,64510 silver badges25 bronze badges




1,64510 silver badges25 bronze badges















  • One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

    – ehennum
    Mar 27 at 16:32











  • Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

    – WhiteSolstice
    Mar 28 at 2:08






  • 1





    Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

    – Michael Gardner
    Mar 28 at 3:09






  • 1





    @WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

    – Wagner Michael
    Mar 28 at 7:28

















  • One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

    – ehennum
    Mar 27 at 16:32











  • Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

    – WhiteSolstice
    Mar 28 at 2:08






  • 1





    Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

    – Michael Gardner
    Mar 28 at 3:09






  • 1





    @WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

    – Wagner Michael
    Mar 28 at 7:28
















One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

– ehennum
Mar 27 at 16:32





One footnote on this good answer: instead of increasing the timeout (which could start failing again if the size of the database increases), the typical strategy is to page over results in multiple requests.

– ehennum
Mar 27 at 16:32













Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

– WhiteSolstice
Mar 28 at 2:08





Thank you for your answer. But i would like to ask one final thing. Based on your codes I attempted to replace "cts:element....)" with "/comments[fn:matches(text,".*generation.*")]" and the time taken suddenly increases by a lot. Is there a certain reasoning for this? I tried to run "/comments[fn:matches(text,".*generation.*")]" by itself and it completed in less then a second. @Wagner Michael

– WhiteSolstice
Mar 28 at 2:08




1




1





Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

– Michael Gardner
Mar 28 at 3:09





Wildcard searches are the culprit. Depending on your use case you can look at the options for lexicon-expand, lexicon-expansion-limit and limit-check (docs.marklogic.com/cts:element-word-query) and/or Wild Card indexes (docs.marklogic.com/guide/search-dev/wildcard)

– Michael Gardner
Mar 28 at 3:09




1




1





@WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

– Wagner Michael
Mar 28 at 7:28





@WhiteSolstice The XPath expression loads every document fragment containing a comments element. In the second filtering stage it then filters out all fragments not containing the word "generation" by regexp. This sucks up alot performance. To better understand this compare both queries using the xdmp:plan(...). I am not sure why the XPath alone is so much faster though. Might be because the query/fragments are already cached.

– Wagner Michael
Mar 28 at 7:28








Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.







Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid …


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55371598%2finternal-server-error-due-to-long-xquery-duration-marklogic%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to preserve electronics (computers, tablets and phones) for hundreds of years Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) The network's official Twitter account is up and running again. What content…How might modern humans leave a message for 50,000 years?How would an aquatic race develop computers?How do we make computers care for human life?Keeping supplies for 1000 yearsWhat will cell phones become in 100 years?What body armor protects against a laser?Could a society attain 1800s technology if limited to using copper and bronze?Electricity power (magic) and electronicsScavenging metal resources in post-apocalypse after 100 yearsWhy would precursors create devices that can survive and still work after hundreds of years?

155 수학 과학 기타 둘러보기 메뉴eh추가해eh문서를 완성해

Convert JSON to MapSimplest way to convert a string representing JSON array into Java array List of key value pairsHow to take String JSON values into HashMapConvert a JSON String to a HashMapCreating BSON object from JSON stringJSONObject - How to get a value ?Better Map ConstructorReading JSON from Url javaUpdate columns if input values are not null otherwise ignore and keep the existing values of column in databaseHow to store object represented as Json string into Couchbase Lite?Go JSON into MapHow do I efficiently iterate over each entry in a Java Map?Sort a Map<Key, Value> by valuesHow to round a number to n decimal places in JavaCan comments be used in JSON?How do I read / convert an InputStream into a String in Java?How can I pretty-print JSON in a shell script?What is the correct JSON content type?How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?Why does Google prepend while(1); to their JSON responses?Parse JSON in JavaScript?