From: Roy W. <gar...@ya...> - 2010-07-19 20:49:46
|
Jason Smith wrote: > How about this one? Any faster? > > <result>{count($hits[@speakername=$speakers[1]])}</result> > 0.9 secs (743 distinct speakers/6689 hits). R. > > Jason Smith > ________________________________________ > From: Roy Walter [gar...@ya...] > Sent: Monday, July 19, 2010 2:34 PM > To: Jason Smith > Cc: exi...@li... > Subject: Re: [Exist-open] Very slow count() query > > Jason Smith wrote: > > Thanks for your response. > >> Have you tried rewriting the xpaths so that they read >> $hits[@speakername=$speaker]? >> > Yes, tried that. Doesn't make a big difference. > >> How long does it take to just run this? >> >> let $hits := collection("/papers")//p[ft:query(., 'drugs')]/.. >> let $speakers := for $speaker in distinct-values($hits/@speakername) >> order by $speaker >> return $speaker >> > 0.8 secs > >> I suspect that the query optimizer is having problems with either the >> original $hits, or with the syntax you've used for $speakers. >> >> Isolate pieces of the query, and as soon as you add something in that >> makes it slow, that is the culprit. >> > Sure, hence this: > > <result>{count($hits/@speakername[.=$speakers[1]])}</result> > > The 'full' query does complete when run from a browser (REST). 6689 > hits; 743 distinct speakers; 68 secs. The count() part of the query is > the bottleneck. > > -- Roy > > > >> *Jason Smith >> * >> >> ------------------------------------------------------------------------ >> *From:* Roy Walter [gar...@ya...] >> *Sent:* Friday, July 16, 2010 7:16 AM >> *To:* exi...@li... >> *Subject:* Re: [Exist-open] Very slow count() query >> >> More on this. The query times out when run from oXygen. If I run the >> query from a browser (REST) it takes more than a minute to return. >> >> R. >> >> >> Roy Walter wrote: >> >>> Consider the following in which the xquery generates a list of >>> distinct @speakernames and then [attempts] to count the number of >>> times each @speakername appears against a search topic: >>> >>> let $hits := collection("/papers")//p[ft:query(., 'drugs')]/.. >>> let $speakers := for $speaker in distinct-values($hits/@speakername) >>> order by $speaker >>> return $speaker >>> (:let $results := >>> for $speaker in $speakers >>> return <result>{count($hits/@speakername[.=$speaker])}</result>:) >>> return >>> <result>{count($hits/@speakername[.=$speakers[1]])}</result> >>> >>> Getting a count of just one speaker (last line) takes approx. 5 >>> seconds. There are 700 distinct speakers (and in this case about 7000 >>> hits). What I really want to achieve is the commented part of the query. >>> >>> What am I doing wrong? >>> >>> Thanks and regards, >>> Roy >>> ------------------------------------------------------------------------ >>> >>> ------------------------------------------------------------------------------ >>> This SF.net email is sponsored by Sprint >>> What will you do first with EVO, the first 4G phone? >>> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Exist-open mailing list >>> Exi...@li... >>> https://lists.sourceforge.net/lists/listinfo/exist-open >>> >>> |