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 19:42:15 GMT
I'll try that, but I'm pretty sure my problem starts at 256 chars.
Let me describe my scenario more in more depth.  We're storing JSON as
a plain string.  We want to do substring searches, where the JSON is
treated as 1 huge string.  Using jcr:like in xpath works as long as
the JSON is less than 256 chars.  More than that and we start getting
into problems.

Btw, thanks for trying to help!

On Mon, Mar 28, 2011 at 2:33 PM, Jeroen Reijn <j.reijn@onehippo.com> wrote:
> Hi Samual,
>
> i'm no expert, but from what I've seen jcr:like searches in stored fields.
> Therefor you probably need to increase the max field length in the search
> configuration. This is set to 10000 characters by default.
>
> See [1] and take a look at the 'maxFieldLength' parameter. Keep in mind
> though that the higher you set this value, the bigger your Lucene index will
> get.
>
> [1]http://wiki.apache.org/jackrabbit/Search
>
> Regards,
>
> Jeroen
>
> On Mon, Mar 28, 2011 at 8:58 PM, Samuel Cox <crankydillo@gmail.com> wrote:
>
>> 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