It would be interesting if search:parse would be able to parse something
like:



title:((encyclopedia OR dictionary) AND (music OR musicology))



That would make user-entered string searches even more powerful and
concise. Not sure if Mike’s xqysp can handle this, but sound to me like it
should be doable to build into ML’s search library. It would also allow to
finally utilize passing multiple search terms to one cts:query call through
the search library, as mentioned by David Ennis..



Cheers,

Geert



*Van:* [email protected] [mailto:
[email protected]] *Namens *Murray, Gregory
*Verzonden:* vrijdag 6 december 2013 22:44
*Aan:* MarkLogic Developer Discussion
*Onderwerp:* Re: [MarkLogic Dev General] Easier word searches with
constraint?



Hi David,



Thanks for the suggestions. I see what you mean about exploding and
reconstructing the search terms. That's essentially what I'm doing now. I
take something like



(encyclopedia OR dictionary) AND (music OR musicology)



tokenize it, and convert it to



(title:encyclopedia OR title:dictionary) AND (title:music OR
title:musicology)



whenever the search needs to be constrained only to book titles. It just
seems rather awkward. As for the programming language, the queries are set
up using XQuery. In fact, it's a web application and all server-side logic
is done in XQuery.



Thanks,

Greg





On Dec 6, 2013, at 2:02 AM, David Ennis wrote:



HI.



Since there are soo many ways to search, I am sure you'll get back plenty
of feedback.  However, a few notes:



If I understand what you want, then I believe the cts search items are more
than robust - combination of and/or queries and field/element queries
depending on how your constraints are set up.  The important key here is
that in most (if not all) instances of the $text parameter for these
queries accept *one or more terms *as input and are treated as "any term
matching".  SO, you could have your terms in a sequence and pass this on as
the values.



something like this:



let list1:= ("dictionary", "encyclopedia")

let list2:= ("music", "musicology")



return cts:search(cts:and-query(

    cts:element-value-query(xs:QName("title"), $list1),

    cts:element-value-query(xs:QName("title), $list2)

))



This above will nto run as-is as you need to look at parameters for the
settings and perhaps you are searching on a field, etc- but should give you
a good primer on the begining ov building complex queries with CTS



###########

Separately, as a programmer, I see the issue as manageable in your current
use of the search:search approach.

Building up your parameters and then exploding them into strings with the
proper glue should give you some ease.  What language are you preparing
your queries in?



Regards,

David





On 6 December 2013 00:49, Charles Greer <[email protected]> wrote:

Hi Greg,

If you want all prefixless searches to be scoped to a particular
element, use the <term> configuration

<term>
<default>
<word>
<element ns="" name="title"/>
</word>
</default>
</term>

I don't see a way to do exactly what you're looking for however.

Charles



On 12/04/2013 11:27 AM, Murray, Gregory wrote:
> I'm using the Search API, where it's easy enough to set up a word
constraint for a given element and then use the key:value syntax to search
only the values of that element, like so:
>
>      <constraint name="title">
>        <word>
>          <element ns="http://example.com/ns"; name="title"/>
>        </word>
>      </constraint>
>
> Then you can search for title:whatever to find titles containing the word
"whatever". This works great, but it's cumbersome for multi-word searches.
For example, if I want titles containing both "sound" and "fury", I have to
search for this:
>
>      title:sound title:fury
>
> It gets worse with situations like this:
>
>      (title:encyclopedia OR title:dictionary) AND (title:music OR
title:musicology)
>
> Before I dig into trying to customize the search grammar or some such --
is there an easier way to perform a word search while applying the *entire*
search expression only to a given element?
>
> Thanks,
> Greg
>
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general

--
Charles Greer
Senior Engineer
MarkLogic Corporation
[email protected]
Phone: +1 707 408 3277
www.marklogic.com


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



_______________________________________________
General mailing list
[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