Hi Chris,

as you already noted, the full-text index
will
only
be
utilized with
the
options that you choose when creating an index. If you want to do more fine-grained searches, it’s
usually
recommendable to
choose
the most general options for creating the index (case insensitive, diacritics insensitive, etc). and
then
refine the results in a second step.
This can e.g. look as follows
:

  declare function local:search($db, $terms) {
    for $result in db:open($db)//*[text() contains text { $terms }]
    return $result[text() contains text { $terms } using case sensitive]
  };
  local:search('factbook', ('German', 'English'))

Hope this helps,
Christian



On Thu, Aug 14, 2014 at 10:54 PM, Chris Yocum <cyocum@gmail.com> wrote:
> Hi Christian,
>
> Apologies for bringing this back up but if I use "using diacritics
> insensitive" in the full text search, it seems to turn full text
> searching off.  I have diacritics true on the database.  I am just
> suprised to see diacritics causing the full text searching to be
> turned off.
>
> All the best,
> Chris
>
> On Wed, Aug 13, 2014 at 01:18:26PM +0200, Christian Grün wrote:
>> Hi Chris,
>>
>> there are various caches involved when evaluating queries, but I can't
>> see for the given query where a cache may be utilized. However, your
>> query may be evaluated faster if you simplify the nested where clause:
>>
>> <results>{
>>   subsequence(
>>     ft:mark(
>>       for $x in collection($col)//entry
>>       where $x//text() contains text { $term } using wildcards
>>       order by fn:lower-case(
>>         fn:replace(($x//orth[1]/text())[1], '\\p{P}|\\d+','')
>>       ) collation "?lang=ga"
>>       return $x
>>     ), 1, 5000
>>   )
>> }</results>
>>
>> You could as well use a predicate with position(), it may be evaluated
>> faster than subsequence (I'm not sure, though, because most time will
>> probably be spent for ordering all results):
>>
>> <results>{
>>   ft:mark(
>>     for $x in collection($col)//entry
>>     where $x//text() contains text { $term } using wildcards
>>     order by fn:lower-case(
>>       fn:replace(($x//orth[1]/text())[1], '\\p{P}|\\d+','')
>>     ) collation "?lang=ga"
>>     return $x
>>   )[position() = 1 to 5000]
>> }</results>
>>
>> Could you please open the InfoView in the GUI, execute the query again
>> and check if the full-text index is applied?
>>
>> Christian
>>
>>
>>
>> On Wed, Aug 13, 2014 at 12:02 PM, Christopher Yocum <cyocum@gmail.com> wrote:
>> > declare variable $term as xs:string external; declare variable $col as
>> > xs:string external; <results>{subsequence(ft:mark(for $x in
>> > collection($col)//entry where $x//text()[. contains text {$term} using
>> > wildcards] order by fn:lower-case(fn:replace(($x//orth[1]/text())[1],
>> > '\\p{P}|\\d+','')) collation \"?lang=ga\" return $x), 1, 5000)}</results>