Есть несколько проблем с тем, что вы, вероятно, делаете.Первым делом будет ошибка, которую вы наблюдаете.Так как вы используете InitialContent
, который обеспечивает индекс с type="counter"
.Для этого вам нужно иметь .with(new NodeCounterEditorProvider())
при создании хранилища.Это должно избежать ошибки, которую вы видите.
Но ваш код, скорее всего, все равно не будет работать, потому что индексы lucene являются асинхронными (что вы правильно настроили).Из-за этого асинхронного поведения вы не можете делать запросы сразу после добавления узла.Я попробовал ваш код, но мне пришлось добавить что-то вроде Thread.sleep(10*1000)
, прежде чем отправлять запросы.
В качестве еще одного примечания, я бы порекомендовал вам попробовать IndexDefinitionBuilder
, чтобы создать структуру индекса lucene.Таким образом, вы можете заменить Tree index = root.getTree ("/");
Tree t = index.addChild("oak:index");
t = t.addChild("lucene");
t.setProperty("jcr:primaryType", "oak:QueryIndexDefinition", Type.NAME);
t.setProperty("compatVersion", Long.valueOf(2L), Type.LONG);
t.setProperty("type", "lucene", Type.STRING);
t.setProperty("async", "async", Type.STRING);
t = t.addChild("indexRules");
t = t.addChild("nt:base");
Tree propnode = t.addChild("properties");
Tree t1 = propnode.addChild("name");
t1.setProperty("name", "name");
t1.setProperty("propertyIndex", Boolean.valueOf(true), Type.BOOLEAN);
root.commit();
на
IndexDefinitionBuilder idxBuilder = new IndexDefinitionBuilder();
idxBuilder.indexRule("nt:base").property("name").propertyIndex();
idxBuilder.build(root.getTree("/").addChild("oak:index").addChild("lucene"));
root.commit();
Последний подход, imo, менее подвержен ошибкам и более редабален.