You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Torgeir Veimo <to...@gmail.com> on 2015/02/10 14:59:41 UTC

no results from full-text index (oak 1.1.6)

My lucene full-text index is configured as per examples as;

        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
        index.child("lucene")
                .setProperty("jcr:primaryType",
"oak:QueryIndexDefinition", Type.NAME)
                .setProperty("type", "lucene")
                .setProperty("async", "async")

.setProperty(PropertyStates.createProperty("includePropertyTypes",
ImmutableSet.of(PropertyType.TYPENAME_STRING,
PropertyType.TYPENAME_BINARY), Type.STRINGS))

.setProperty(PropertyStates.createProperty("excludePropertyNames",
ImmutableSet.of("jcr:createdBy", "jcr:lastModifiedBy"), Type.STRINGS))
                .setProperty("reindex", true);

But it doesn't provide any results. From my understanding, this
definition will index any STRING and BINARY property type,

Trying a query like //*[jcr:contains(., 'test')] doesn't work, even
though I've got nodes with test in string properties.

-- 
-Tor

Re: no results from full-text index (oak 1.1.6)

Posted by Torgeir Veimo <to...@gmail.com>.
I have configured an empty repository with the following setup;


            segmentStore = new FileStore(new File(oakRepositoryPath), 256);
            NodeStore nodeStore = new SegmentNodeStore(segmentStore);

            Oak oak = new Oak(nodeStore);

            LuceneIndexProvider provider = new LuceneIndexProvider();
            oakRepository = new Jcr(oak)
                    .with(new LocalInitialContent())
                    .with((QueryIndexProvider) provider)
                    .with((Observer) provider)
                    .with(new LuceneIndexEditorProvider())
                    .with(new LuceneInitializerHelper("lucene",
(Set<String>) null))
                    .withAsyncIndexing()
                    .createRepository();

The lucene index is configured in the LocalInitialContent class using;

    @Override
    public void initialize(NodeBuilder builder) {

        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
        index.child("lucene")
            .setProperty("jcr:primaryType",
"oak:QueryIndexDefinition", Type.NAME)
            .setProperty("type", "lucene")
            .setProperty("async", "async")
            .setProperty(PropertyStates.createProperty("includePropertyTypes",
ImmutableSet.of(PropertyType.TYPENAME_STRING,
PropertyType.TYPENAME_BINARY), Type.STRINGS))
            .setProperty(PropertyStates.createProperty("excludePropertyNames",
ImmutableSet.of("jcr:createdBy", "jcr:lastModifiedBy"), Type.STRINGS))
            .setProperty("reindex", true);
    }

Now, when I start up my app, I get the following relevant log entries;

20:16:48,314 DEBUG repository.RepositoryService.afterPropertiesSet() -
line 105 [] - creating repository
20:16:48,923 INFO  index.IndexUpdate.shouldReindex() - line 145 [] -
Found a new index node [reference]. Reindexing is requested
20:16:48,925 INFO  index.IndexUpdate.enter() - line 110 [] -
Reindexing will be performed for following indexes: [/oak:index/uuid,
/oak:index/reference, /oak:index/nodetype]
20:16:49,167 DEBUG action.AccessControlAction.setAC() - line 150 [] -
System user: admin; omit ac setup.
20:16:49,168 DEBUG user.UserManagerImpl.createUser() - line 167 [] -
User created: admin
20:16:49,171 DEBUG action.AccessControlAction.setAC() - line 150 [] -
System user: anonymous; omit ac setup.
20:16:49,173 DEBUG user.UserManagerImpl.createUser() - line 167 [] -
User created: anonymous
20:16:49,218 INFO  index.IndexUpdate.enter() - line 110 [] -
Reindexing will be performed for following indexes:
[/oak:index/principalName, /oak:index/acPrincipalName,
/oak:index/authorizableId]
[...]
20:16:54,055 DEBUG index.AsyncIndexUpdate.run() - line 261 [] -
Running background index task async
20:16:54,057 INFO  index.AsyncIndexUpdate.run() - line 294 [] -
Initial async index update
20:16:54,085 INFO  index.IndexUpdate.shouldReindex() - line 145 [] -
Found a new index node [counter]. Reindexing is requested
20:16:54,204 INFO  lucene.IndexDefinition.updateDefinition() - line
884 [] - Updated index definition for <No 'name' property defined>
20:16:54,205 INFO  index.IndexUpdate.enter() - line 110 [] -
Reindexing will be performed for following indexes:
[/oak:index/counter, /oak:index/lucene]

I then add some content, among them a node of type ka:asset
(oak:Unstructured) with the title Torgeir Veimo, which I then search
for;

20:27:46,389 DEBUG query.QueryEngineImpl.parseQuery() - line 107
[0:0:0:0:0:0:0:1] - Parsing JCR-SQL2 statement: select * from
[ka:asset] where contains(*, 'torgeir')
20:27:46,390 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost using filter Filter(query=select * from
[ka:asset] where contains(*, 'torgeir') fullText="torgeir", path=*)
20:27:46,390 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for reference is Infinity
20:27:46,390 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for property is Infinity
20:27:46,390 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for ordered is Infinity
20:27:46,391 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for nodeType is Infinity
20:27:46,392 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for aggregate lucene is Infinity
20:27:46,393 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for lucene-property is Infinity
20:27:46,393 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for traverse is Infinity
20:27:46,393 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - query execute select * from [ka:asset] where
contains(*, 'torgeir')
20:27:46,394 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - query plan [ka:asset] as [ka:asset] /* traverse
"*" where contains([ka:asset].[*], 'torgeir') */
20:27:46,399 WARN  query.Cursors$TraversingCursor.fetchNext() - line
312 [0:0:0:0:0:0:0:1] - Traversed 1000 nodes with filter
Filter(query=select * from [ka:asset] where contains(*, 'torgeir')
fullText="torgeir", path=*); consider creating an index or changing
the query
20:27:46,401 DEBUG repository.RepositoryAdminService.toNodeObjects() -
line 218 [0:0:0:0:0:0:0:1] - loading: 0, pageSize: 100, totalCount: 0
assets took 0ms

If I query for nt:base instead, I don't get the "traversed 1000
nodes..", but there's no results then either

20:28:33,809 DEBUG repository.RepositoryAdminService.query() - line
155 [0:0:0:0:0:0:0:1] - searching for: select * from [nt:base] where
contains(*, 'torgeir')
20:28:33,810 DEBUG query.QueryEngineImpl.parseQuery() - line 107
[0:0:0:0:0:0:0:1] - Parsing JCR-SQL2 statement: select * from
[nt:base] where contains(*, 'torgeir')
20:28:33,810 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost using filter Filter(query=select * from
[nt:base] where contains(*, 'torgeir') fullText="torgeir", path=*)
20:28:33,810 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for reference is Infinity
20:28:33,810 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for property is Infinity
20:28:33,811 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for ordered is Infinity
20:28:33,811 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for nodeType is Infinity
20:28:33,811 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for aggregate lucene is Infinity
20:28:33,812 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for lucene-property is Infinity
20:28:33,812 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - cost for traverse is Infinity
20:28:33,812 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - query execute select * from [nt:base] where
contains(*, 'torgeir')
20:28:33,813 DEBUG query.QueryImpl.logDebug() - line 894
[0:0:0:0:0:0:0:1] - query plan [nt:base] as [nt:base] /* traverse "*"
where contains([nt:base].[*], 'torgeir') */
20:28:33,813 DEBUG repository.RepositoryAdminService.toNodeObjects() -
line 218 [0:0:0:0:0:0:0:1] - loading: 0, pageSize: 100, totalCount: 0
assets took 0ms


I have also tried setting up the luene index more in line with the new
examples at http://jackrabbit.apache.org/oak/docs/query/lucene.html,
here in LocalInitialContent;

        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
        index.child("lucene")
            .setProperty("jcr:primaryType",
"oak:QueryIndexDefinition", Type.NAME)
            .setProperty("compatVersion", "2")
            .setProperty("type", "lucene")
            .setProperty("async", "async")
            .setProperty("reindex", true)
            .child("indexRules")
                .setProperty("jcr:primaryType", "oak:Unstructured", Type.NAME)
                .child("nt:base")
                    .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                    .child("properties")
                        .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                        .child("allProps")
                            .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                            .setProperty("name", ".*")
                            .setProperty("isRegEx", true)
                            .setProperty("nodeScopeIndex", true);
        index.child("lucene")
            .child("indexRules")
                .child("ka:asset")
                    .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                    .child("properties")
                        .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                        .child("allProps")
                            .setProperty("jcr:primaryType",
"oak:Unstructured", Type.NAME)
                            .setProperty("name", ".*")
                            .setProperty("isRegEx", true)
                            .setProperty("nodeScopeIndex", true);


but then I get these messages in the log, repeatedly;

20:41:42,024 WARN  lucene.IndexDefinition.collectIndexRules() - line
505 [] - IndexRule node does not have orderable children in [Lucene
Index : /oak:index/lucene]
20:41:42,027 WARN
lucene.IndexDefinition$IndexingRule.collectPropConfigs() - line 730 []
- Properties node for [IndexRule: ka:asset] does not have orderable
children in [Lucene Index : /oak:index/lucene]
20:41:42,031 WARN
lucene.IndexDefinition$IndexingRule.collectPropConfigs() - line 730 []
- Properties node for [IndexRule: nt:base] does not have orderable
children in [Lucene Index : /oak:index/lucene]

so I assume this configuration is not correct. Any pointers to what I
need to change?



On 11 February 2015 at 20:11, Torgeir Veimo <to...@gmail.com> wrote:
> Is there a way to trigger full reindex? Can I just set the reindex
> property on the index definition to true?
>
> On 11 February 2015 at 18:17, Thomas Mueller <mu...@adobe.com> wrote:
>> Hi,
>>
>> This should work (full-text queries work for me). Maybe you need to wait
>> for the Lucene index to be updated (it is asynchronous)? Maybe you want to
>> double-check with the documentation at
>> http://jackrabbit.apache.org/oak/docs/query/lucene.html
>>
>> Regards,
>> Thomas
>>
>>
>>
>>
>> On 10/02/15 14:59, "Torgeir Veimo" <to...@gmail.com> wrote:
>>
>>>My lucene full-text index is configured as per examples as;
>>>
>>>        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
>>>        index.child("lucene")
>>>                .setProperty("jcr:primaryType",
>>>"oak:QueryIndexDefinition", Type.NAME)
>>>                .setProperty("type", "lucene")
>>>                .setProperty("async", "async")
>>>
>>>.setProperty(PropertyStates.createProperty("includePropertyTypes",
>>>ImmutableSet.of(PropertyType.TYPENAME_STRING,
>>>PropertyType.TYPENAME_BINARY), Type.STRINGS))
>>>
>>>.setProperty(PropertyStates.createProperty("excludePropertyNames",
>>>ImmutableSet.of("jcr:createdBy", "jcr:lastModifiedBy"), Type.STRINGS))
>>>                .setProperty("reindex", true);
>>>
>>>But it doesn't provide any results. From my understanding, this
>>>definition will index any STRING and BINARY property type,
>>>
>>>Trying a query like //*[jcr:contains(., 'test')] doesn't work, even
>>>though I've got nodes with test in string properties.
>>>
>>>--
>>>-Tor
>>
>
>
>
> --
> -Tor



-- 
-Tor

Re: no results from full-text index (oak 1.1.6)

Posted by Torgeir Veimo <to...@gmail.com>.
Is there a way to trigger full reindex? Can I just set the reindex
property on the index definition to true?

On 11 February 2015 at 18:17, Thomas Mueller <mu...@adobe.com> wrote:
> Hi,
>
> This should work (full-text queries work for me). Maybe you need to wait
> for the Lucene index to be updated (it is asynchronous)? Maybe you want to
> double-check with the documentation at
> http://jackrabbit.apache.org/oak/docs/query/lucene.html
>
> Regards,
> Thomas
>
>
>
>
> On 10/02/15 14:59, "Torgeir Veimo" <to...@gmail.com> wrote:
>
>>My lucene full-text index is configured as per examples as;
>>
>>        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
>>        index.child("lucene")
>>                .setProperty("jcr:primaryType",
>>"oak:QueryIndexDefinition", Type.NAME)
>>                .setProperty("type", "lucene")
>>                .setProperty("async", "async")
>>
>>.setProperty(PropertyStates.createProperty("includePropertyTypes",
>>ImmutableSet.of(PropertyType.TYPENAME_STRING,
>>PropertyType.TYPENAME_BINARY), Type.STRINGS))
>>
>>.setProperty(PropertyStates.createProperty("excludePropertyNames",
>>ImmutableSet.of("jcr:createdBy", "jcr:lastModifiedBy"), Type.STRINGS))
>>                .setProperty("reindex", true);
>>
>>But it doesn't provide any results. From my understanding, this
>>definition will index any STRING and BINARY property type,
>>
>>Trying a query like //*[jcr:contains(., 'test')] doesn't work, even
>>though I've got nodes with test in string properties.
>>
>>--
>>-Tor
>



-- 
-Tor

Re: no results from full-text index (oak 1.1.6)

Posted by Thomas Mueller <mu...@adobe.com>.
Hi,

This should work (full-text queries work for me). Maybe you need to wait
for the Lucene index to be updated (it is asynchronous)? Maybe you want to
double-check with the documentation at
http://jackrabbit.apache.org/oak/docs/query/lucene.html

Regards,
Thomas




On 10/02/15 14:59, "Torgeir Veimo" <to...@gmail.com> wrote:

>My lucene full-text index is configured as per examples as;
>
>        NodeBuilder index = IndexUtils.getOrCreateOakIndex(builder);
>        index.child("lucene")
>                .setProperty("jcr:primaryType",
>"oak:QueryIndexDefinition", Type.NAME)
>                .setProperty("type", "lucene")
>                .setProperty("async", "async")
>
>.setProperty(PropertyStates.createProperty("includePropertyTypes",
>ImmutableSet.of(PropertyType.TYPENAME_STRING,
>PropertyType.TYPENAME_BINARY), Type.STRINGS))
>
>.setProperty(PropertyStates.createProperty("excludePropertyNames",
>ImmutableSet.of("jcr:createdBy", "jcr:lastModifiedBy"), Type.STRINGS))
>                .setProperty("reindex", true);
>
>But it doesn't provide any results. From my understanding, this
>definition will index any STRING and BINARY property type,
>
>Trying a query like //*[jcr:contains(., 'test')] doesn't work, even
>though I've got nodes with test in string properties.
>
>-- 
>-Tor