Hi Bram, Thanks for your query. This is just a quick response, but you could have a look at the new %rest:single annotation in BaseX [1]. Your feedback is welcome.
Christian [1] http://docs.basex.org/wiki/RESTXQ#Query_Execution On Thu, Apr 21, 2016 at 3:11 PM, Bram Vanroy | KU Leuven <bram.vanr...@student.kuleuven.be> wrote: > Hello all > > > > I have been reading through many emails on this list and I’ve learnt a lot > about how Basex works and how others use it. A month or so back I have sent > an email myself to this list concerning caching. Even though I have some > more questions about that, I will leave that for another time. Today I am > concerned about retrieving chunked input from Basex. > > > > (Question also found on StackOverflow, with a nice bounty! J > http://stackoverflow.com/questions/36675388/efficient-and-user-friendly-way-to-present-slow-loading-results) > > > > Case at hand: we use Basex to query a 50 million tokens corpus. We also make > this available to other users through a website. The thing is that this is > slow. For our own projects that’s no problem, we dive straight into the > back-end and run a search command from terminal and let the query run for > all the time it needs. However, for users it is paramount that they get a > quick response. At the moment it is taking too long. I don’t blame BaseX. We > love BaseX and are astounded by its efficiency and optimisations! However, > we want to deliver the best user-experience to our users. > > > > We call a new session from PHP, wait to receive the results, do some > post-processing and then load the result page. As said, this takes too much > time. We’ve been looking into some solutions. The best one that I think > should be possible, is returning chunks of the results. Do you know those > websites that allow you to see results but only, like, 20 per page? I think > something similar is appropriate. When a user has searched for a pattern, we > only show the 20 or so first results just so they can get an idea of the > results they’d find. Then, when they click a button, we should query for the > twenty next results which are then appended to the list (JavaScript solution > I guess), and so on. Until all results have been found. Additionally, I will > also provide a button from which users can download all results in a text > file. This is allowed to take a longer time. The main thing is that users > should get early feedback and results on their query. > > > > Now the question is if something like this is possible in an efficient > manner in BaseX. Can you form a query that only finds the 20 first results, > and then the following 20 and so on – and is this faster than searching > everything at once? In other words, when I am searching for the results > 120-140 (after having pushed the button a couple of times), is BaseX smart > enough to skip the search space it has already done to find the 120 previous > hits? If so, that would be great. Could you help me on my way, with some > PHP/XQuery code that is suitable? > > > > I also highly encourage you to participate on StackOverflow. As I said, I am > offering a 200 bounty – for the people who are interested in Internet fame. > J > > > > > > Thank you for your time > > > > Kind regards > > > > Bram Vanroy > > http://bramvanroy.be