I am trying to implement Lucene index full-text search with OSGi RDB
document service, but it's not working,

Lucene search working fine if I created repository like below,

Scenario 1: searching working correctly

@Overrideprotected 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

@Autowiredprivate NodeStore documentNodeStoreService;

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

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


    private static CommitInfo createCommitInfo() {
        Map<String, Object> infoMap = ImmutableMap.<String,
Object>of(CommitContext.NAME, new SimpleCommitContext());
        return new CommitInfo(SESSION_ID, null, infoMap);
    }

    private NodeStore intializeNodeStoreService() {
        EditorHook hook = new EditorHook(
                new CompositeEditorProvider(new
NamespaceEditorProvider(), new TypeEditorProvider()));
        try {
            NodeBuilder builder = documentNodeStoreService.getRoot().builder();
            new InitialContent().initialize(builder);
            documentNodeStoreService.merge(builder, hook, createCommitInfo());

        } catch (CommitFailedException e) {
            throw new RuntimeException(e);
        }

        return documentNodeStoreService;

    }

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 ,

      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();
  }

Reply via email to