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 "Thomas Mueller (JIRA)" <ji...@apache.org> on 2015/09/02 13:54:45 UTC

[jira] [Commented] (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=14727214#comment-14727214 ] 

Thomas Mueller commented on OAK-3156:
-------------------------------------

I'm not sure if we need to support xpath (and if yes: how). Also, I'm not sure if we need to support "select ... from [nt:unstructured]" with "suggest" queries. Couldn't you just use "from [nt:base]"?

I guess we need to decide what we want to support, and why. One reason could be compatibility with Jackrabbit 2.x. As for xpath support: in my view, xpath is the "high level" query language, and sql-2 is the "low level" language. For "suggest" queries, those don't return nodes really, do we need to support xpath? Why?

> 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, OAK-3156-take2.patch, OAK-3156.patch
>
>
> 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)