Моя проблема была похожей - после обновления до neo4j 1.5 (с 1.4) мои индексы были повреждены.Мой случай: у меня было два индекса:
__types__
: для индексации типа сохраняемых объектов (предоставляется spring-data-neo4j 2.0.0.RC1
) User
: для индексации поля имени пользователя, поэтому я мог выполнять поиск после них
Это привело к серьезной проблеме, когда я мог найти все узлы по их идентификатору, но не мог выполнить поиск после имени пользователя или перечислить все объекты определенногоtype.
Исправление (я предоставлю код Java, но идея будет такой же и на других языках):
/* begin a transaction */
Transaction tx = graphDatabaseService.beginTx();
/* for all nodes in the database */
for (Node node : graphDatabaseService.getAllNodes()) {
/* reconstruct the saved object based on the __type__ property on the node - the result is a class that was annotated with @NodeEntity */
DefaultDbNode ddn = neo4jTemplate.createEntityFromStoredType(node,
null);
/* reindex this node, adding it to the __types__ index, with key "className" (it is used by spring-data-neo4j) with the value __type__ */
graphDatabaseService.index().forNodes("__types__")
.add(node, "className", node.getProperty("__type__"));
/* if the reconstructed object is a User object */
if (ddn instanceof User) {
/* add it to the User index, with the key "username" (which is also the saved fields name) */
graphDatabaseService.index().forNodes("User")
.add(node, "username", node.getProperty("username"));
}
}
/* end transaction */
tx.success();
tx.finish();
Надеюсь, это поможет вам или кому-то другому!