jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "H. Wilson" <wils...@randdss.com>
Subject Re: Problems with hyphen in JSR-170 XPath query using jcr:contains
Date Mon, 30 Aug 2010 19:55:20 GMT
  I should also correct myself further here... After adding more 
"whitespace" test cases this afternoon, (it seems last Friday, I only 
added a test for exact name with a whitespace), it appears 
whitespace+wildcard+case insensitive searches of ANY type fail. I am 
really hoping to get this whitespace thing figured out soon.

H. Wilson

On 08/27/2010 03:06 PM, H. Wilson wrote:
>  OK, well I got the spaces part figured out, and will post it for 
> anyone who needs it. Putting quotes around the spaces unfortunately 
> did not work.  During testing, I determined that if you performed the 
> following query for the exact fullName property:
>
>     filter.addContains ( @fullName, 
> '"+Text.escapeIllegalXpathSearchChars(".North.South.East.West Land"));
>
> It would return nothing. But tweak it a little and add a wildcard, and 
> it would return results:
>
>    filter.addContains ( @fullName,
>    '"+Text.escapeIllegalXpathSearchChars(".North.South.East.West Lan*"));
>
> But since I did not want to throw in wild cards where they might not 
> be wanted, if a search string contained spaces, did not contain wild 
> cards and the user was not concerned with case sensitivity, I used the 
> fn:lower-case. So I ended up with the following excerpt (our clients 
> wanted options for case sensitive and case insensitive searching) .
>
> public OurParameter[] getOurParameters (boolean 
> performCaseSensitiveSearch, String searchTerm, String srchField ) { 
> //srchField in this case was fullName
>
>    .....
>
>    if ( performCaseSensitiveSearch) {
>
>        //jcr:like for case sensitive
>        filter.orJCRExpression ("jcr:like(@" + srchField +", 
> '"+Text.escapeIllegalXpathSearchChars (searchTerm)+"')");
>
>    }
>    else {
>
>        //only use fn:lower-case if there is spaces, with NO wild cards
>
>        if ( searchTerm.contains (" ")&&  !searchTerm.contains ("*")&&
 
> !searchTerm.contains ("?") ) {
>
>            filter.addJCRExpression ("fn:lower-case(@"+srchField+") = 
> '"+Text.escapeIllegalXpathSearchChars(searchTerm.toLowerCase())+"'");
>
>        }
>
>        else {
>
>            //jcr:contains for case insensitive
>            filter.addContains ( srchField, 
> Text.escapeIllegalXpathSearchChars(searchTerm));
>
>        }
>
>    }
>    ....
>
> }
>
>
> Hope that helps anyone who needs it.
>
> H. Wilson
>
>>> OK so it looks like I have one other issue. Using the configuration as
>>> posted below and sticking to my previous examples, with the addition 
>>> of one
>>> with whitespace. With the following three in our repository:
>>>
>>>    .North.South.East.WestLand
>>>    .North.South.East.West_Land
>>>    .North.South.East.West Land    //yes that's a space
>>>
>>> ...using a jcr:contains, with exact name search with NO wild cards: the
>>> first two return properly, but the last one yields no result.
>>>
>>>    filter.addContains(@fullName,
>>> '"+org.apache.jackrabbit.util.Text.escapeIllegalXpathSearchChars(".North.South.East.West

>>>
>>> Land") +"'));
>> I think the space in a contains is seen as an AND by the
>> Jackrabbit/Lucene QueryParser. I should test this however as I am not
>> sure. Perhaps you can put quotes around it, not sure if that works
>> though
>>
>> Regards Ard
>>
>>> According to the Lucene documentation, KeywordAnalyzer should be 
>>> creating
>>> one token, plus combined with escaping the Illegal Characters (i.e. 
>>> spaces),
>>> shouldn't this search work? Thanks again.
>>>
>>> H. Wilson
>

Mime
View raw message