> This is the full function.
Do you have a query call that runs out of the box? Sorry for my persistence, but it usually takes us much more time reconstructing use cases than actually fixing potential bugs.
> *.* happens when the keyword section of the query is an empty string.
I'm still wondering about the leading *, because "*.*" and ".*" are equivalent patterns (in the first string, the leading * will simply be ignored).
We assume that the user wants all results for the specified doctype. If no doctype (empty string) is specified, we assume they want the entire library.
>
> In 8.5.2, I get 0 item found when I search for keywords = ''
>
> declare
>
>
> function search:search-all($doctype as xs:string, $keywords as xs:string, $operator as xs:string, $lang as xs:string) as node(){
> let $keywords :=
> if (normalize-space($keywords)='')
> then '*'
> else $keywords
> let $words := tokenize(normalize-space($keywords), ' ')
> let $wild-words := for $word in $words
> return concat($word, '.*')
> let $first-words := if (count($words) > 1)
> then string-join($words[position()!=last()], ' ')
> else ''
> let $last-keyword := tokenize(normalize-space($keywords), ' ')[last()]
> let $wild-keywords := if (string-length($last-keyword) > 3)
> then concat($first-words, ' ', $last-keyword, '.*')
> else ''
> let $all-wild-keywords := tokenize(normalize-space($wild-keywords), ' ')
>
> let $search-subset :=
> if ($doctype = '')
> then db:open($lang)/*
> else db:open($lang)/*[name()=$doctype]
>
> let $search-result :=
> if ($operator = 'and')
> then $search-subset[(descendant::title[1] contains text ({$wild-words} all using wildcards weight {2})) or (. contains text ({$wild-words} all using wildcards weight {0.5}))]
> else $search-subset[(descendant::title[1] contains text ({$wild-words} any using wildcards weight {2})) or (. contains text ({$wild-words} any using wildcards weight {0.5}))]
>
> let $ordered-results := for $x score $s in $search-result
> order by $s descending, $x/title ascending
> return $x
> (: Adding no result in options because Safari 9.1.1 doesn't always respond to :empty
> no longer being empty after a $.get :)
> return <div>
> <div style="width:100%;">
> <span style="display:inline-block; font-style:italic; text-align:right; width:100%;">{count($ordered-results)} {
>
>
> if (count($ordered-results) < 2)
> then resources:get-app-string('item-found', $lang)
> else resources:get-app-string('items-found', $lang)
> }</span>
> </div>
> {search:format-result-docs-as-table($ordered-results, $lang)}
> </div>
>
> };