neo4j - как повторно запустить обновленный индекс существующих данных?

У меня есть следующий класс BaseContent с составным индексом:

public abstract class BaseContent<D extends BaseContentDTO> extends BaseEntity {

    /* The FULLTEXT index allows to search on non case-sensitive queries */
    @Indexed(indexName = "search_content")
    @NotNull
    protected String name;

    @Indexed(indexName = "search_content")
    protected Integer year;
}

Теперь мне нужно обновить индекс, чтобы он был ПОЛНОТЕКСТОВЫМ индексом, чтобы поддерживать поиск без учета регистра.

Я изменил его следующим образом:

public abstract class BaseContent<D extends BaseContentDTO> extends BaseEntity {

    /* The FULLTEXT index allows to search on non case-sensitive queries */
    @Indexed(indexName = "search_content", indexType=IndexType.FULLTEXT)
    @NotNull
    protected String name;

    @Indexed(indexName = "search_content", indexType=IndexType.FULLTEXT)
    protected Integer year;
}

Теперь при попытке поднять сервер получаю исключение:

Index with the same name but different config exists!

Я вручную удалял предыдущий индекс и при повторном поднятии сервера вроде правильно создал индексы.

Однако при запросе существующих данных я снова получил исключение и понял, что он снова не переиндексировал существующие данные.

Есть ли способ переиндексировать существующие данные?

Спасибо, Кармель.


person Carmel Baumel-Ezra    schedule 31.12.2013    source источник
comment
Я бы, вероятно, снова перебрал объекты, переустановил свойства и сохранил их, чтобы переиндексировать данные.   -  person Michael Hunger    schedule 03.01.2014


Ответы (1)


Вы можете использовать метод add класса Index для добавления узлов в существующий индекс, как в следующем фрагменте кода:

   @Autowired Neo4jOperations neo4jOperations;
   Index index = neo4jOperations.getGraphDatabase().getIndex("search_content");
   Collection<YourClass> objects = neo4jOperations.findAll(YourClass.class).as(Collection.class);

   for (YourClass object: objects) {
        Node node = neo4jOperations.getNode(object.getId());

        index.add(node, "name", node.getProperty("name"));
        index.add(node, "year", node.getProperty("year"));
    }

Я использовал имя класса-заполнителя YourClass, поскольку вы не показываете конкретное имя класса в своем коде.

person remigio    schedule 31.12.2013