You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Vikas Saurabh (JIRA)" <ji...@apache.org> on 2015/08/12 11:56:45 UTC

[jira] [Comment Edited] (OAK-3156) Lucene suggestions index definition can't be restricted to a specific type of node

    [ https://issues.apache.org/jira/browse/OAK-3156?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14693240#comment-14693240 ] 

Vikas Saurabh edited comment on OAK-3156 at 8/12/15 9:55 AM:
-------------------------------------------------------------

btw, this also diverges from the current query model where we can say
{noformat}
SELECT *  FROM [test:Asset]  as asset WHERE asset.foo='bar'
{noformat}
This doesn't specify any path (and hence currently queries on root).

Even if we have a path restriction, I think the intent of path restriction has always been 'give the redable' rows under this path - the path itself might/might not be redable.


was (Author: catholicon):
btw, this also diverges from the current query model where we can say
{noformat}
SELECT [rep:suggest()] as suggestion  FROM [test:Asset] WHERE suggest('in')
{noformat}
This doesn't specify any path (and hence currently queries on root).

Even if we have a path restriction, I think the intent of path restriction has always been 'give the redable' rows under this path - the path itself might/might not be redable.

> Lucene suggestions index definition can't be restricted to a specific type of node
> ----------------------------------------------------------------------------------
>
>                 Key: OAK-3156
>                 URL: https://issues.apache.org/jira/browse/OAK-3156
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: lucene
>            Reporter: Vikas Saurabh
>            Assignee: Tommaso Teofili
>         Attachments: LuceneIndexSuggestionTest.java
>
>
> While performing a suggestor query like 
> {code}
> SELECT [rep:suggest()] as suggestion  FROM [nt:unstructured] WHERE suggest('foo')
> {code}
> Suggestor does not provide any result. In current implementation, [suggestions|http://jackrabbit.apache.org/oak/docs/query/lucene.html#Suggestions] in Oak work only for index definitions for {{nt:base}} nodetype.
> So, an index definition like:
> {code:xml}
>     <lucene-suggest
>         jcr:primaryType="oak:QueryIndexDefinition"
>         async="async"
>         compatVersion="{Long}2"
>         type="lucene">
>         <indexRules jcr:primaryType="nt:unstructured">
>             <nt:base jcr:primaryType="nt:unstructured">
>                 <properties jcr:primaryType="nt:unstructured">
>                     <description
>                         jcr:primaryType="nt:unstructured"
>                         analyzed="{Boolean}true"
>                         name="description"
>                         propertyIndex="{Boolean}true"
>                         useInSuggest="{Boolean}true"/>
>                 </properties>
>             </nt:base>
>         </indexRules>
>     </lucene-suggest>
> {code}
> works, but if we change nodetype to {{nt:unstructured}} like:
> {code:xml}
>     <lucene-suggest
>         jcr:primaryType="oak:QueryIndexDefinition"
>         async="async"
>         compatVersion="{Long}2"
>         type="lucene">
>         <indexRules jcr:primaryType="nt:unstructured">
>             <nt:unstructured jcr:primaryType="nt:unstructured">
>                 <properties jcr:primaryType="nt:unstructured">
>                     <description
>                         jcr:primaryType="nt:unstructured"
>                         analyzed="{Boolean}true"
>                         name="description"
>                         propertyIndex="{Boolean}true"
>                         useInSuggest="{Boolean}true"/>
>                 </properties>
>             </nt:base>
>         </indexRules>
>     </lucene-suggest>
> {code}
> , it won't work.
> The issue is that suggestor implementation essentially is passing a pseudo row with path=/.:
> {code:title=LucenePropertyIndex.java}
>     private boolean loadDocs() {
> ...
>                         queue.add(new LuceneResultRow(suggestedWords));
> ...
> {code}
> and
> {code:title=LucenePropertyIndex.java}
>         LuceneResultRow(Iterable<String> suggestWords) {
>             this.path = "/";
>             this.score = 1.0d;
>             this.suggestWords = suggestWords;
>         }
> {code}
> Due to path being set to "/", {{SelectorImpl}} later filters out the result as {{rep:root}} (primary type of "/") isn't a {{nt:unstructured}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)