[xquery-talk] Looking for help restricting results per input?

Andrew Welch andrew.j.welch at gmail.com
Mon Sep 24 01:59:21 PDT 2012


On 24 September 2012 07:47, Jeremy Botto <fishtankbeta at gmail.com> wrote:
> let $keywords := ("keyworda", "keywordb", "keywordc")
> for $keyword in $keywords,
> $v in doc('test')//document/item
> where $v/quote contains text {$keyword}
> return (<re>
> {$v/comment}
> {$v/buyer}</re>)
>
> There are three things I am trying to add to this query:
>
> 1) I'd like to get only two results per $keyword in $keywords, but I am
> currently getting 20-30 results per keyword.

You've got a "cartesian cross product" in your for expression.... is
that really what you want?

> 2) I'd like to search for case-insensitive keywords.

Covert both items to lower-case() before comparing, or use your xquery
vendors custom extensions.

> 3) Because I am trying to receive only 2 results, I want to prioritize
> results whose 'quote' element also contain round braces "(" and ")".

Use order by - if if the quote contains round brackets return 1 else
return 0, then sort by number descending.


-- 
Andrew Welch
http://andrewjwelch.com


More information about the talk mailing list