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
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.zimmer@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.zimmer@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"; 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 Zimmer sebastian.zimmer@uni-koeln.de Cologne Center for eHumanities DH Center at the University of Cologne @CCeHum -- Sebastian Zimmer sebastian.zimmer@uni-koeln.de Cologne Center for eHumanities DH Center at the University of Cologne @CCeHum
Cologne Center for
eHumanities
DH Center at the University of Cologne
@CCeHum