If you have a controlled list of elements (even if it is dozens), you can do 
something like the following:



(: The following list could be in a configuration file somewhere where you can 
easily update/maintain without changing code :)

let $list := ('cat', 'dog', 'elephant')

let $value := "abc123"



let $qnamelist :=

    for $item in $list

    return

        xs:QName($item)



return

   cts:search(fn:doc(),

      cts:or-query(

         (

         cts:element-attribute-value-query($qnamelist, xs:QName("id"), $value),

         cts:element-attribute-value-query($qnamelist, xs:QName("alt-id"), 
$value)

         )

      )

   )







Brad Rix

Technical Lead

Office:

+1.303.542.2172

Mobile:

+1.303.915.2771

Fax:

+1.303.544.0522

IM/Gmail Name:

bradford.rix

www.FlatironsSolutions.com

[email protected]









-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Iain Tatch
Sent: Wednesday, August 28, 2013 8:08 AM
To: [email protected]
Cc: [email protected]
Subject: Re: [MarkLogic Dev General] Constrained searches across multiple 
element names



Hi Asit



Thank you for your reply.



While that search will certainly work, I neglected to mention that our document 
store is currently > 50 million documents (and increasing daily), and we need 
to perform the search in a timely fashion (preferably within 1 second), and 
therefore searching on XPath, especially using the // notation to search all 
elements of all documents, doesn't scale for that sort of environment.



So we're really looking for a solution that use the cts:query logic so that we 
can leverage MarkLogic's indexes -- we've used this extremely successfully up 
to now for other queries, but haven't yet had to deal with a single user 
constraint being required to search the same attribute across multiple elements.





Thanks.

Iain



Senior software engineer

BBC FM Publishing Services Editorial Metadata







On 28/08/13 14:56, 
[email protected]<mailto:[email protected]> wrote:

> Hi Iain,

>

> You can keep all documents in a collection and then use query like below :

>

> let $id := "abc123"

> Return

> cts:search(fn:collection("MyCollection")//*[@id[.=$id]],())

>

> This query will give you that particular document which contain id="abc123"

>

> Similar you can use with combination

>

> let $id := "abc123"

> let $alt-id :="zyx987"

> Return

> cts:search(fn:collection("MyCollection")//*[@id[.=$id]][@alt-id[.=$alt

> -id]],())

>

> This query will give you that particular document which contain id="abc123" 
> and alt-id=" zyx987"

>

> Hope, it will help you.

>

> Regards,

> Asit Nautiyal

>

> -----Original Message-----

> From: 
> [email protected]<mailto:[email protected]>

> [mailto:[email protected]] On Behalf Of Iain

> Tatch

> Sent: Wednesday, August 28, 2013 6:58 PM

> To: General MarkLogic Developer Discussion

> Subject: [MarkLogic Dev General] Constrained searches across multiple

> element names

>

> Hello all

>

> We have the following (simplified) example documents:

>

> <cat id="abc123" alt-id="zyx987" xmlns="blah"> .. </cat>

>

> <dog id="aaa999" alt-id="bbb888" xmlns="blah"> .. </dog>

>

> <elephant id="xxxxxx" alt-id="yyyyyy" xmlns="blah"> .. </elephant>

>

> In other words, our documents are all in the same namespace, they all have 
> attributes @id and @alt-id, but the root node might be many different types 
> (I've specified 'cat', 'dog', 'elephant' here but in reality there are not 
> just 3, there are potentially dozens).

>

> We'd like to give our users the ability to search this data with

> queries such as

>

> id:aaa999

>

> or

>

> alt-id:zyx987

>

> but I'm having trouble composing a valid set of Search constraint options to 
> achieve this.  As far as I can tell, for both value constraints and word 
> constraints I'd need to specify an element name as well as the attribute 
> name, and obviously in this case there could be many different element names.

>

>

> Any suggestions gratefully received!

>

>

> TIA

> Iain Tatch

> Senior software engineer

> BBC FM Publishing Services Editorial Metadata

>

> _______________________________________________

> General mailing list

> [email protected]<mailto:[email protected]>

> http://developer.marklogic.com/mailman/listinfo/general

> This e-mail and any files transmitted with it are for the sole use of the 
> intended recipient(s) and may contain confidential and privileged 
> information. If you are not the intended recipient(s), please reply to the 
> sender and destroy all copies of the original message. Any unauthorized 
> review, use, disclosure, dissemination, forwarding, printing or copying of 
> this email, and/or any action taken in reliance on the contents of this 
> e-mail is strictly prohibited and may be unlawful.



_______________________________________________

General mailing list

[email protected]<mailto:[email protected]>

http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to