You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by Sandeep Ambule <sa...@gmail.com> on 2020/02/24 04:28:28 UTC

Lucene search not working with osgi RDB DocumentService

Hi ,

i am trying to implement lucene index  fulltest search with osgi RDB
documentService,but its not working,

Lucene search working fine if i created repository like below,

Scenario 1: searching working correctly

    @Override
    protected ContentRepository createRepository() {
        return getOakRepo().createContentRepository();
    }

    Oak getOakRepo() {
      //  LowCostLuceneIndexProvider provider = new
LowCostLuceneIndexProvider();
    LuceneIndexProvider provider = new LuceneIndexProvider();
        return new Oak(createInitialContent())
            .with(new OpenSecurityProvider())
            .with((QueryIndexProvider) provider)
            .with((Observer) provider)
            .with(new LuceneIndexEditorProvider());
    }



    private  DocumentNodeStore createInitialContent()
    {
    DocumentNodeStore ds=createRDBStore();
        EditorHook hook = new EditorHook(
                new CompositeEditorProvider(new NamespaceEditorProvider(),
new TypeEditorProvider()));

        OakInitializer.initialize(ds, new InitialContent(), hook);
        return ds;
    }


    public DocumentNodeStore createRDBStore()
    {
    String jdbcurl="jdbc:postgresql://127.0.0.1:5432/SP05";
    String user="postgres";
    String pw="manager";
    DataSource dataSource = RDBDataSourceFactory.forJdbcUrl(jdbcurl, user,
pw);
    DocumentNodeStore store = new
RDBDocumentNodeStoreBuilder().newRDBDocumentNodeStoreBuilder()
       .setRDBConnection(dataSource).build();
return store;
    }



Scenario 2: searching not working

    @Autowired
private NodeStore documentNodeStoreService;

   @Override
    protected ContentRepository createRepository() {
        return getOakRepo().createContentRepository();
    }

    Oak getOakRepo() {
      //  LowCostLuceneIndexProvider provider = new
LowCostLuceneIndexProvider();
    LuceneIndexProvider provider = new LuceneIndexProvider();
        return new Oak(documentNodeStoreService)
            .with(new OpenSecurityProvider())
            .with((QueryIndexProvider) provider)
            .with((Observer) provider)
            .with(new LuceneIndexEditorProvider());
    }


In this case repository get created but searching not working,
giving error like  Traversal query (query without index)

Can you tell me ,what wrong i am doing here?



 Code to create Lucene index in both scenario ,

   protected void createTestIndexNode() throws Exception {
        Tree index = root.getTree("/");
        Tree indexDefn = createTestIndexNode(index,
LuceneIndexConstants.TYPE_LUCENE);
        TestUtil.useV2(indexDefn);

        indexDefn.setProperty(LuceneIndexConstants.TEST_MODE, true);

indexDefn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION,
true);

        Tree props = TestUtil.newRulePropTree(indexDefn, "nt:base");

props.getParent().setProperty(FulltextIndexConstants.INDEX_NODE_NAME, true);
        TestUtil.enablePropertyIndex(props, "c1/p", false);
        TestUtil.enableForFullText(props,
FulltextIndexConstants.REGEX_ALL_PROPS, true);
        TestUtil.enablePropertyIndex(props, "a/name", false);
        TestUtil.enablePropertyIndex(props, "b/name", false);
        TestUtil.enableFunctionIndex(props, "length([name])");
        TestUtil.enableFunctionIndex(props, "lower([name])");
        TestUtil.enableFunctionIndex(props, "upper([name])");

        root.commit();
    }

Re: Lucene search not working with osgi RDB DocumentService

Posted by Manfred Baedke <ma...@gmail.com>.
Hi Sandeep,

Maybe I'm missing something, but in scenario 2 it looks like you don't 
create the initial content.
Also I'd suggest using oak-dev@jackrabbit.apache.org, not 
dev@jackrabbit.apache.org.

Best regards,
Manfred

On 2/24/2020 5:28 AM, Sandeep Ambule wrote:
> Hi ,
>
> i am trying to implement lucene index  fulltest search with osgi RDB 
> documentService,but its not working,
>
> Lucene search working fine if i created repository like below,
>
> Scenario 1: searching working correctly
>
>     @Override
>     protected ContentRepository createRepository() {
>         return getOakRepo().createContentRepository();
>     }
>
>     Oak getOakRepo() {
>       //  LowCostLuceneIndexProvider provider = new 
> LowCostLuceneIndexProvider();
>     LuceneIndexProvider provider = new LuceneIndexProvider();
>         return new Oak(createInitialContent())
>             .with(new OpenSecurityProvider())
>             .with((QueryIndexProvider) provider)
>             .with((Observer) provider)
>             .with(new LuceneIndexEditorProvider());
>     }
>
>
>
>     private  DocumentNodeStore createInitialContent()
>     {
>     DocumentNodeStore ds=createRDBStore();
>         EditorHook hook = new EditorHook(
>                 new CompositeEditorProvider(new 
> NamespaceEditorProvider(), new TypeEditorProvider()));
>
>         OakInitializer.initialize(ds, new InitialContent(), hook);
>         return ds;
>     }
>
>
>     public DocumentNodeStore createRDBStore()
>     {
>     String jdbcurl="jdbc:postgresql://127.0.0.1:5432/SP05 
> <http://127.0.0.1:5432/SP05>";
>     String user="postgres";
>     String pw="manager";
>     DataSource dataSource = RDBDataSourceFactory.forJdbcUrl(jdbcurl, 
> user, pw);
>     DocumentNodeStore store = new 
> RDBDocumentNodeStoreBuilder().newRDBDocumentNodeStoreBuilder()
>        .setRDBConnection(dataSource).build();
> return store;
>     }
>
>
>
> Scenario 2: searching not working
>
>     @Autowired
> private NodeStore documentNodeStoreService;
>
>    @Override
>     protected ContentRepository createRepository() {
>         return getOakRepo().createContentRepository();
>     }
>
>     Oak getOakRepo() {
>       //  LowCostLuceneIndexProvider provider = new 
> LowCostLuceneIndexProvider();
>     LuceneIndexProvider provider = new LuceneIndexProvider();
>         return new Oak(documentNodeStoreService)
>             .with(new OpenSecurityProvider())
>             .with((QueryIndexProvider) provider)
>             .with((Observer) provider)
>             .with(new LuceneIndexEditorProvider());
>     }
>
>
> In this case repository get created but searching not working,
> giving error like  Traversal query (query without index)
>
> Can you tell me ,what wrong i am doing here?
>
>
>
>  Code to create Lucene index in both scenario ,
>
>    protected void createTestIndexNode() throws Exception {
>         Tree index = root.getTree("/");
>         Tree indexDefn = createTestIndexNode(index, 
> LuceneIndexConstants.TYPE_LUCENE);
>         TestUtil.useV2(indexDefn);
>
>         indexDefn.setProperty(LuceneIndexConstants.TEST_MODE, true);
> indexDefn.setProperty(FulltextIndexConstants.EVALUATE_PATH_RESTRICTION, 
> true);
>
>         Tree props = TestUtil.newRulePropTree(indexDefn, "nt:base");
> props.getParent().setProperty(FulltextIndexConstants.INDEX_NODE_NAME, 
> true);
>         TestUtil.enablePropertyIndex(props, "c1/p", false);
>         TestUtil.enableForFullText(props, 
> FulltextIndexConstants.REGEX_ALL_PROPS, true);
>         TestUtil.enablePropertyIndex(props, "a/name", false);
>         TestUtil.enablePropertyIndex(props, "b/name", false);
>         TestUtil.enableFunctionIndex(props, "length([name])");
>         TestUtil.enableFunctionIndex(props, "lower([name])");
>         TestUtil.enableFunctionIndex(props, "upper([name])");
>
>         root.commit();
>     }
>