Hi ,
I am trying to query with Lucene index but getting the empty result and
below errors in the log,
Traversal query (query without index): select [jcr:path] from [nt:base]
where isdescendantnode('/test') and name='World'; consider creating an index
[async] The index update failed
org.apache.jackrabbit.oak.api.CommitFailedException: OakAsync0002: Missing
index provider detected for type [counter] on index [/oak:index/counter]
can you help me to find what wrong I am doing here,
public class SimpleTest {
@Test
public void simpleTest() throws Exception {
NodeStore store = new MemoryNodeStore();
//create reposiotory
LuceneIndexProvider provider = new LuceneIndexProvider();
ContentRepository repository = new Oak(store)
.with(new OpenSecurityProvider())
.with(new InitialContent())
.with(new NodeCounterEditorProvider())
.with((QueryIndexProvider) provider)
.with((Observer) provider)
.with(new LuceneIndexEditorProvider())
.withAsyncIndexing("async",
5).createContentRepository();
//login reposiotory and retrive session
ContentSession contentSession = repository.login(null, null);
Root root = contentSession.getLatestRoot();
//create lucene index
IndexDefinitionBuilder idxBuilder = new
IndexDefinitionBuilder().async("async");
idxBuilder.indexRule("nt:base").property("name").propertyIndex();
idxBuilder.build(root.getTree("/").addChild("oak:index").addChild("lucene"));
root.commit();
//Create TestNode
String h = "Hello";
String w = "World";
Tree test = root.getTree("/").addChild("test");
test.addChild("a").setProperty("name", Arrays.asList(new String[] {
h, w }), Type.STRINGS);
test.addChild("b").setProperty("name", h);
root.commit();
// wait for async indexing cycle (avoiding more elegant ways)
Thread.sleep(TimeUnit.SECONDS.toMillis(10));
//Search
String query = "select [jcr:path] from [nt:base] where
isdescendantnode('/test') and name='World' option(traversal fail)";
List<String> paths = executeQuery(root, query);
for (String path : paths) {
System.out.println("Path=" + path);
}
}
private List<String> executeQuery(Root root, String query) throws
ParseException {
Result result = root.getQueryEngine()
.executeQuery(query, "JCR-SQL2", QueryEngine.NO_BINDINGS,
QueryEngine.NO_MAPPINGS);
return StreamSupport.stream(result.getRows().spliterator(), false)
.map(row -> row.getPath())
.collect(Collectors.toList());
}
}
Regards,
Sandeep Ambule