I wonder if it needs to be escaped twice or something? I mean, you have a
java string that's a string containing another string. Maybe you can turn
on some logging/tracing in the lucene classes and somehow get it to show
you the string it actually ended up using? You may end up having to step
into the code in the debugger. This is all open source stuff so you can do
that..

Best regards,
Clay Ferguson
[email protected]


On Thu, Feb 25, 2016 at 12:47 PM, Leonardo Rodriguez-Velez <
[email protected]> wrote:

> Clay,
>
> Thanks for the suggestion. I tried escaping the dash as well and it
> appears that the Oak query parser doesn't process it correctly:
>
> 25.02.2016 13:42:08.209 *DEBUG* [192.168.1.1 [1456425728209] GET
> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
> query execute select * from [oak:Unstructured] as a where native(a,
> 'LuceneIndexTest', 'merchant_id:merchant\-1')
> 25.02.2016 13:42:08.209 *DEBUG* [192.168.1.1 [1456425728209] GET
> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
> query plan [oak:Unstructured] as [a] /*
> lucene:LuceneIndexTest(/oak:index/LuceneIndexTest) merchant_id:merchant
> merchant_id:1 where native([a], [LuceneIndexTest],
> 'merchant_id:merchant\-1') */
> 25.02.2016 13:42:08.209 *DEBUG* [192.168.1.1 [1456425728209] GET
> /content.query.json HTTP/1.1]
> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex loading
> the first 50 entries for query merchant_id:merchant merchant_id:1
> 25.02.2016 13:42:08.209 *TRACE* [192.168.1.1 [1456425728209] GET
> /content.query.json HTTP/1.1]
> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.perf 0
> ... [took 0ms]
>
> You can see that it breaks/parses the value into two parts, which should
> still return something since the property definition includes
> "analyzed=true". I also tried other combinations with double quoted values,
> escaped double quoted values, etc. but none worked.
>
> I did find one way to make this work, but it's kind of a hack using the
> Lucene range operator:
>
> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
> 'merchant_id:[merchant-704658 merchant-704658])
>
> This does work and returns the desired merchant node, but seems less than
> optimal.
>
> --Leo
>
> On 2/25/16 1:19 PM, Clay Ferguson wrote:
>
>> I think maybe you just need to escape the '-' ?
>>
>>
>> http://stackoverflow.com/questions/17839053/how-to-perform-a-lucene-query-containing-special-character-using-queryparser
>>
>>
>> Best regards,
>> Clay Ferguson
>> [email protected]
>>
>>
>> On Thu, Feb 25, 2016 at 11:56 AM, Leonardo Rodriguez-Velez <
>> [email protected]> wrote:
>>
>> Hello all,
>>>
>>> After some more testing it appears that queries of the form:
>>>
>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>> 'merchant_id:merchant-*')
>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>> 'merchant_id:merchant-?')
>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>> 'merchant_id:merchant-~')
>>>
>>> do work. These queries are the wildcard and fuzzy match queries in the
>>> native Lucene language and I believe require a fulltext index.
>>>
>>> However, I would like to query for a specific value like this:
>>>
>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>> 'merchant_id:merchant-1')
>>>
>>> I've tried several combinations, with and without quotes and escaped
>>> quotes around merchant-1, and I get zero results.
>>>
>>> https://issues.apache.org/jira/browse/OAK-2241 Indicates that :
>>> " Currently, native queries are only supported for full-text indexes. The
>>> LuceneProperty index would also benefit from that. So I think we need to
>>> add a new marker interface, NativeQueryIndex, so we can support it."
>>>
>>> This ticket was supposed to add support for "LuceneProperty index", which
>>> I assume means non-fulltext queries should be supported.
>>>
>>> So, are exact match Field queries such as described here:
>>> https://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Fields
>>> supported or not?
>>>
>>> --Leo
>>>
>>> On 2/24/16 3:58 PM, Leonardo Rodriguez-Velez wrote:
>>>
>>> Hello,
>>>>
>>>> I'm trying to get native Lucene queries working, but get no results.My
>>>> Oak version is jcr.repository.version: 1.3.7
>>>>
>>>> I followed the Oak/Lucene guide here:
>>>> https://jackrabbit.apache.org/oak/docs/query/lucene.html#native-query
>>>>
>>>> I can open the actual Lucene index withLUKE <
>>>> https://github.com/tarzanek/luke> and I am able to run the following
>>>> query and get one result: merchant_id:merchant-704658
>>>>
>>>>
>>>> When I run the equivalent query in Sling/OAK I get no results:
>>>>
>>>> SQL
>>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>>> 'merchant_id:(merchant-704658)')
>>>>
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.query.QueryEngineImpl Parsing sql statement:
>>>> select [jcr:path] from [nt:base] where native('LuceneIndexTest',
>>>> 'merchant_id:merchant-704658')
>>>> 24.02.2016 15:54:43.078 *TRACE* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.SQL2Parser
>>>> Literal used
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost using filter Filter(query=select [jcr:path] from [nt:base] where
>>>> native('LuceneIndexTest', 'merchant_id:merchant-704658'), path=*,
>>>> property=[native*LuceneIndexTest=[merchant_id:merchant-704658]])
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for reference is Infinity
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for nodeType is Infinity
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for property is Infinity
>>>> 24.02.2016 15:54:43.078 *TRACE* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner Evaluating
>>>> plan
>>>> with index definition Lucene Index :
>>>> LuceneIndexTest(/oak:index/LuceneIndexTest)
>>>> 24.02.2016 15:54:43.078 *TRACE* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner Evaluating
>>>> plan
>>>> with index definition Lucene Index : /oak:index/lucene
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for lucene-property[/oak:index/LuceneIndexTest] is 2.0
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for traverse is Infinity
>>>> 24.02.2016 15:54:43.078 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> query execute select [jcr:path] from [nt:base] where
>>>> native('LuceneIndexTest', 'merchant_id:merchant-704658')
>>>> 24.02.2016 15:54:43.079 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> query plan [nt:base] as [nt:base] /*
>>>> lucene:LuceneIndexTest(/oak:index/LuceneIndexTest) merchant_id:merchant
>>>> merchant_id:704658 where native([nt:base], [LuceneIndexTest],
>>>> 'merchant_id:merchant-704658') */
>>>> 24.02.2016 15:54:43.079 *DEBUG* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex
>>>> loading
>>>> the first 50 entries for query merchant_id:merchant merchant_id:704658
>>>> 24.02.2016 15:54:43.080 *TRACE* [192.168.1.1 [1456347283078] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.perf
>>>> 0
>>>> ... [took 1ms]
>>>>
>>>>
>>>> ---------------------------------------------------------------------------------------------
>>>>
>>>> or XPATH
>>>> //*[rep:native('LuceneIndexTest', 'merchant-704658')]
>>>>
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.query.QueryEngineImpl Parsing xpath statement:
>>>> //*[rep:native('LuceneIndexTest', 'merchant_id:merchant-704658')]
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.query.QueryEngineImpl XPath > SQL2: select
>>>> [jcr:path], [jcr:score], * from [nt:base] as a where native(a,
>>>> 'LuceneIndexTest', 'merchant_id:merchant-704658') /* xpath:
>>>> //*[rep:native('LuceneIndexTest', 'merchant_id:merchant-704658')] */
>>>> 24.02.2016 15:56:27.138 *TRACE* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.SQL2Parser
>>>> Literal used
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost using filter Filter(query=select [jcr:path], [jcr:score], * from
>>>> [nt:base] as a where native(a, 'LuceneIndexTest',
>>>> 'merchant_id:merchant-704658') /* xpath:
>>>> //*[rep:native('LuceneIndexTest',
>>>> 'merchant_id:merchant-704658')] */, path=*,
>>>> property=[native*LuceneIndexTest=[merchant_id:merchant-704658]])
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for reference is Infinity
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for nodeType is Infinity
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for property is Infinity
>>>> 24.02.2016 15:56:27.138 *TRACE* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner Evaluating
>>>> plan
>>>> with index definition Lucene Index :
>>>> LuceneIndexTest(/oak:index/LuceneIndexTest)
>>>> 24.02.2016 15:56:27.138 *TRACE* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.IndexPlanner Evaluating
>>>> plan
>>>> with index definition Lucene Index : /oak:index/lucene
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for lucene-property[/oak:index/LuceneIndexTest] is 2.0
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> cost for traverse is Infinity
>>>> 24.02.2016 15:56:27.138 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> query execute select [jcr:path], [jcr:score], * from [nt:base] as a
>>>> where
>>>> native(a, 'LuceneIndexTest', 'merchant_id:merchant-704658') /* xpath:
>>>> //*[rep:native('LuceneIndexTest', 'merchant_id:merchant-704658')] */
>>>> 24.02.2016 15:56:27.139 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1] org.apache.jackrabbit.oak.query.QueryImpl
>>>> query plan [nt:base] as [a] /*
>>>> lucene:LuceneIndexTest(/oak:index/LuceneIndexTest) merchant_id:merchant
>>>> merchant_id:704658 where native([a], [LuceneIndexTest],
>>>> 'merchant_id:merchant-704658') */
>>>> 24.02.2016 15:56:27.139 *DEBUG* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex
>>>> loading
>>>> the first 50 entries for query merchant_id:merchant merchant_id:704658
>>>> 24.02.2016 15:56:27.139 *TRACE* [192.168.1.1 [1456347387138] GET
>>>> /content.query.json HTTP/1.1]
>>>> org.apache.jackrabbit.oak.plugins.index.lucene.LucenePropertyIndex.perf
>>>> 0
>>>> ... [took 0ms]
>>>>
>>>>
>>>> ---------------------------------------------------------------------------------------------
>>>>
>>>> My custom Lucene Index definition looks like this (you can see I
>>>> specified the functionName as above):
>>>>
>>>> {
>>>> "jcr:primaryType": "oak:QueryIndexDefinition",
>>>> "compatVersion": 2,
>>>> "functionName": "LuceneIndexTest",
>>>> "name": "LuceneIndexTest",
>>>> "type": "lucene",
>>>> "async": "async",
>>>> "evaluatePathRestrictions": true,
>>>> "reindex": false,
>>>> "reindexCount": 4,
>>>> "indexRules": {
>>>>      "jcr:primaryType": "nt:unstructured",
>>>>      "nt:base": {
>>>>              "jcr:primaryType": "nt:unstructured",
>>>>              "includePropertyTypes": "[String, Date]",
>>>>              "properties": {
>>>>                      "jcr:primaryType": "nt:unstructured",
>>>>                      "jcr:lastModified": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "ordered": true,
>>>>                              "propertyIndex": true,
>>>>                              "name": "jcr:content/jcr:lastModified",
>>>>                              "type": "Date",
>>>>                              "nodeName": "lastModified"
>>>>                      },
>>>>                      "jcr:primaryType": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "ordered": false,
>>>>                              "propertyIndex": true,
>>>>                              "name": "jcr:primaryType",
>>>>                              "type": "String",
>>>>                              "nodeName": "jcr:primaryType"
>>>>                      },
>>>>                      "merchant_id": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "propertyIndex": true,
>>>>                              "analyzed": true,
>>>>                              "index": true,
>>>>                              "name": "merchant_id"
>>>>                      }
>>>>              }
>>>>      },
>>>>      "oak:Unstructured": {
>>>>              "jcr:primaryType": "nt:unstructured",
>>>>              "includePropertyTypes": "[String, Date]",
>>>>              "properties": {
>>>>                      "jcr:primaryType": "nt:unstructured",
>>>>                      "jcr:lastModified": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "ordered": true,
>>>>                              "propertyIndex": true,
>>>>                              "name": "jcr:content/jcr:lastModified",
>>>>                              "type": "Date",
>>>>                              "nodeName": "lastModified"
>>>>                      },
>>>>                      "jcr:primaryType": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "ordered": false,
>>>>                              "propertyIndex": true,
>>>>                              "name": "jcr:primaryType",
>>>>                              "type": "String",
>>>>                              "nodeName": "jcr:primaryType"
>>>>                      },
>>>>                      "merchant_id": {
>>>>                              "jcr:primaryType": "nt:unstructured",
>>>>                              "propertyIndex": true,
>>>>                              "analyzed": true,
>>>>                              "index": true,
>>>>                              "name": "merchant_id",
>>>>                              "nodeName": "merchant_id"
>>>>                      }
>>>>              }
>>>>      }
>>>>          }
>>>> }
>>>>
>>>> It appears that this functionality is not working. I found a relatedOAK
>>>> JIRA ticket <https://issues.apache.org/jira/browse/OAK-2205> and
>>>> someone
>>>> left a message indicating: "The feature would not work with
>>>> LucenePropertyIndex due to OAK-2241".
>>>>
>>>> Any suggestions are greatly appreciated.
>>>>
>>>>
>>>>
>

Reply via email to