jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sridhar Raman" <sridhar.ra...@gmail.com>
Subject Re: Querying on multi-value properties
Date Tue, 18 Dec 2007 11:32:27 GMT
> You can use contains and 'and' the different
> terms, ie,

> "//*[jcr:contains(.,'stephen') and jcr:contains(.,'king')]"
Herein lies the main problem.  Say I had a node with 2 values for the
property author, namely "stephen jordan" and "terry king".
The above query would still flag this node as a matching node, though the
same property _actually_ doesn't contain stephen AND king.  Probably the
reason for this is that the property is searched as a whole, and a special
case for multi-value is not made.

Regarding analysers, I actually have my own analyser, etc.  So that is not a
problem.  Just that a search that I wish would be enforced only on each
single value of a multi-value property doesn't happen.  The search is
"spread" across the property values.

Is this how it should work?

On Dec 18, 2007 2:35 PM, Ard Schrijvers <a.schrijvers@hippo.nl> wrote:

>
> > Isn't //*[@author='stephen king'] a case-sensitive search?
>
> You have fn:lower-case
>
> > Besides if I had a node with an author value as "stephen
> > edwin king", this query wouldn't work.  Right?
>
> True, but I did not know you where having all kinds of combinations of
> one and the same person. You can use contains and 'and' the different
> terms, ie,
>
> "//*[jcr:contains(.,'stephen') and jcr:contains(.,'king')]"
>
> Otherwise, you could look at if the synonymprovider is useable for
> multiple terms. If not, and you really want to make it the way you want,
> you can always add your own AuthorAnalyzer (combination of
> KeywordAnalyzer and SynonymAnalyzer) and then you can use
>
> //*[@author='stephen edward king']
> //*[@author='Stephen Edward King']
> //*[@author='stephen king']
> //*[@author='Stephen King']
>
> depending on how you organize your analyzer. Not really trivial the
> first time, but makes you understand lucene analyzing a but, and how to
> optimize searches you want to do.
>
> Regards Ard
>
> >
> > On Dec 17, 2007 7:03 PM, Ard Schrijvers <a.schrijvers@hippo.nl> wrote:
> >
> > > Hello,
> > >
> > > //*[@author='stephen king'] should do it
> > >
> > > Regards Ard
> > >
> > > >
> > > > This is the node structure I have:
> > > > bookType:
> > > > - authors (multiple)
> > > >
> > > > I may have around 1000 nodes of bookType.  Now, I want to
> > find all
> > > > nodes of type bookType that have "stephen king" in the property
> > > > author.
> > > >
> > > > A simple jcr:contains query with like this -
> > jcr:contains(@authors,
> > > > 'stephen
> > > > king') - doesn't work as I would want it to.  The reason
> > being, if
> > > > by chance, I have a node that has "stephen" in one of the author
> > > > values, and "king" in another value of property author,
> > this node is
> > > > returned as a match.  But I want _only_ those nodes that have
> > > > "stephen" and "king" in the same value of the author property.
> > > >
> > > > Example:
> > > > nodeA:
> > > > - authors {"stephen king", "robert jordan"}
> > > >
> > > > nodeB:
> > > > - authors {"good stephen", "royal king"}
> > > >
> > > > On running the query, I get both nodeA and nodeB.  But I
> > want only
> > > > nodeA.
> > > > Is there any way of doing
> > > > this?
> > > >
> > > > Thanks,
> > > > Sridhar
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message