jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Samuel Cox <crankydi...@gmail.com>
Subject Re: jcr:like on long string properties (Jackrabbit 1.6.1)
Date Mon, 28 Mar 2011 18:58:10 GMT
First, I just tried with Jackrabbit and got the same result.
Basically, using jcr:like as part of a xpath query is not working for
long string properties.  I have the following Scala app written for
testing.  I can port to Java if necessary..

import javax.jcr._
import org.apache.jackrabbit.core.TransientRepository

object Searcher {
  def main(args: Array[String]): Unit = {
    val repo = new TransientRepository();
    val session = repo.login(new SimpleCredentials("f", Array('p')));
    try {

      val root = session.getRootNode;
      val node = root.addNode("anode");
      node.setProperty("ls", ("a" * 10000) + "bcd");
      node.setProperty("ss", "aaabcd");

      session.save();

      val searcher = new Searcher(session);

      // Expect this to return sequence with 1 element.
      val res = searcher.xpath(".[jcr:like(@ss, \"%bc%\")]");
      println(res.size)  // and it does

      // Expect this to return sequence with 1 element.
      val res2 = searcher.xpath(".[jcr:like(@ls, \"%bc%\")]");
      println(res2.size)  // but it does not
    } finally {
      session.logout();
    }
  }
}

import javax.jcr.{Node, NodeIterator, Session}
import javax.jcr.version.Version
import javax.jcr.query.Query.XPATH;

/**
* A facade for querying Jackrabbit.
*
* @author scox
*/
class Searcher(session: Session) {

  implicit def nodeIter2Iter(
      i: NodeIterator
    ) = new Iterator[Node] {
    def next = i.nextNode;
    def hasNext = i.hasNext;
    def remove = i.remove;
  }


  lazy val queryMgr = session.getWorkspace.getQueryManager

  def xpath(xpath: String): Seq[Node] = {
    val query = queryMgr.createQuery(xpath, XPATH);
    val result = query.execute;
    val iter = result.getNodes;
    iter.toSeq
  }
}


On Mon, Mar 28, 2011 at 1:21 PM, Jeroen Reijn <j.reijn@onehippo.com> wrote:
> Hi Samuel,
>
> could you describe what is not working? As far as I know this should work
> for any string, but it might have to do with the query or the stored values.
>
> Regards,
>
> Jeroen
>
> On Wed, Feb 23, 2011 at 4:40 PM, Samuel Cox <crankydillo@gmail.com> wrote:
>
>> Hi,
>>
>> I have been operating under the assumption that I could use jcr:like
>> to in effect do a substring search across string properties.  This
>> worked well for all my test cases.  The problem is that the real data
>> has strings that are much longer than my test data (bad test data:).
>> Anyhow, should this not work for any length string?  I realize the
>> performance is bad, but we don't anticipate this search crossing
>> thousands and thousands of nodes.
>>
>> Here is a sample xpath:
>>
>>
>> jcr:system/jcr:versionStorage/_x0036_c/_x0038_6/cb/_x0036_c86cb58-74a9-4955-b4a5-6b19eb6469f2/_x0031_.14//pvsw:artifact[jcr:like(pvsw:data/@pvsw:contents,
>> '%EDI%')]
>>
>> I'm going to try upgrading to 1.6.4 now.
>>
>> Any help is greatly appreciated.
>>
>

Mime
View raw message