Thanks, good catch. I have opened an issue for that [1]. – Best, Christian
[1] https://github.com/BaseXdb/basex/issues/1597 On Tue, Jul 24, 2018 at 11:51 AM Sebastian Zimmer < sebastian.zim...@uni-koeln.de> wrote: > Hi Christian, > > this is the simplest query I could come up with: > > xquery version "3.1"; > let $fuzzy := false() > > return ( > collection('BIBL')/*:TEI[ > if ($fuzzy) > then () > else (.[descendant::text() contains text {"string"} using fuzzy]) > ] > ) > > is optimized to: > > (db:open-pre("BIBL", 0), ...)/*:TEI[descendant::text() contains text "string" > using fuzzy using language 'English'] > > > should be optimized to: > > ft:search("BIBL", "string")/ancestor::*:TEI > > Thanks, > Sebastian > > Am 24.07.2018 um 11:23 schrieb Christian Grün: > > Hi Sebastian, > > I guess the index was only rewritten for index access in BaseX 8 because > the two branches of the if/then/else expression was simplified incorrectly > and replaced with one of the branches. To simplify debugging, could you > please simplify your query even more and drop all superfluous expressions > that do not relate to this bug? > > Thanks in advance, > Christian > > > > On Tue, Jul 24, 2018 at 11:16 AM Sebastian Zimmer < > sebastian.zim...@uni-koeln.de> wrote: > >> Hi again, >> >> I have compared the output of the latest BaseX 9.1 with 8.6.7 and it >> looks like a regression. >> >> Whereas in 8.6.7, the query ist optimized two times with ft:search, in >> 9.1 only one time. >> >> See attached for both outputs. >> >> Best, >> Sebastian >> >> Am 23.07.2018 um 11:55 schrieb Sebastian Zimmer: >> >> The full-text index of the database is enabled and the compiling info >> section of the query states >> >> - apply full-text index for { $string_0 } using language 'English' >> >> The optimized query looks to me as if the index is applied only once via >> ft:search, but not in both cases. >> >> Best, >> Sebastian >> >> Am 23.07.2018 um 11:47 schrieb Christian Grün: >> >> Hi Sebastian, >> >> Did you check in the Info View panel if the index is applied? If no, >> you might try something as follows: >> >> if ($fuzzy) then ( >> collection('ZK')/tei:TEI[... using fuzzy]) >> ) else ( >> collection('ZK')/tei:TEI[...]) >> ) >> >> Usually, if full-text options are dynamic, I tend to use ft:search [1]. >> >> Best, >> Christian >> >> [1] http://docs.basex.org/wiki/Full-Text_Module#ft:search >> >> >> >> >> On Mon, Jul 23, 2018 at 11:41 AM Sebastian >> Zimmer<sebastian.zim...@uni-koeln.de> <sebastian.zim...@uni-koeln.de> wrote: >> >> Hi Christian, >> >> thanks for the fix, the result is correct now. >> >> But this query now takes about 18 seconds (!) to execute, instead of <1 >> second like before. Do you think, this could be accelerated? >> >> See attached for the complete console output. >> >> Best, >> Sebastian >> >> >> Am 12.07.2018 um 13:03 schrieb Christian Grün: >> >> Hi Sebastian, >> >> This has been fixed. The background: In one of the optimizations of >> the "if" expression, identical branches are merged: >> >> if(..expensive query..) then 1 else 1 >> → Optimized Query: 1 >> >> The full-text options were ignored in the equality check. >> A new snapshot is online. >> >> Best, >> Christian >> >> >> >> On Wed, Jul 11, 2018 at 1:22 PM Sebastian >> Zimmer<sebastian.zim...@uni-koeln.de> <sebastian.zim...@uni-koeln.de> wrote: >> >> Hi, >> >> I have a query which is optimized in a curious way in BaseX 9.0.2 >> (yesterday's snapshot). >> >> This is the original query: >> >> xquery version "3.1"; >> declare namespace tei = "http://www.tei-c.org/ns/1.0" >> <http://www.tei-c.org/ns/1.0>; >> let $string := "string" >> let $fuzzy := false() >> >> return ( >> collection('ZK')/tei:TEI[ >> if (false()) >> then (.[descendant::text() contains text {$string} using fuzzy]) >> else (.[descendant::text() contains text {$string}]) >> ], >> collection('ZK')/tei:TEI[ >> if ($fuzzy) >> then (.[descendant::text() contains text {$string} using fuzzy]) >> else (.[descendant::text() contains text {$string}]) >> ] >> ) >> >> And this is the optimized one (newlines inserted by me for better >> readability): >> >> ( >> ft:search("ZK", "string" using language >> 'English')/ancestor::tei:TEI[parent::document-node()], >> ft:search("ZK", "string" using fuzzy using language >> 'English')/ancestor::tei:TEI[parent::document-node()] >> ) >> >> I'm curious why the second search is using fuzzy, even though the variable >> $fuzzy is false. I presume that query optimization is independent of the >> data, so you won't need the data to reproduce. But if you do, I can provide >> it. A database with enabled full-text index is required obviously. >> >> Best regards, >> Sebastian Zimmer >> >> -- >> Sebastian zimmersebastian.zim...@uni-koeln.de >> >> Cologne Center for eHumanities >> DH Center at the University of Cologne >> @CCeHum >> >> >> -- >> Sebastian zimmersebastian.zim...@uni-koeln.de >> >> Cologne Center for eHumanities >> DH Center at the University of Cologne >> @CCeHum >> >> >> -- >> Sebastian Zimmer >> sebastian.zim...@uni-koeln.de >> [image: CCeH Logo] <http://cceh.uni-koeln.de> >> >> Cologne Center for eHumanities <http://cceh.uni-koeln.de> >> DH Center at the University of Cologne >> [image: Twitter Logo] <https://twitter.com/CCeHum>@CCeHum >> <https://twitter.com/CCeHum> >> >> >> -- >> Sebastian Zimmer >> sebastian.zim...@uni-koeln.de >> [image: CCeH Logo] <http://cceh.uni-koeln.de> >> >> Cologne Center for eHumanities <http://cceh.uni-koeln.de> >> DH Center at the University of Cologne >> [image: Twitter Logo] <https://twitter.com/CCeHum>@CCeHum >> <https://twitter.com/CCeHum> >> > > -- > Sebastian Zimmer > sebastian.zim...@uni-koeln.de > [image: CCeH Logo] <http://cceh.uni-koeln.de> > > Cologne Center for eHumanities <http://cceh.uni-koeln.de> > DH Center at the University of Cologne > [image: Twitter Logo] <https://twitter.com/CCeHum>@CCeHum > <https://twitter.com/CCeHum> >