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