У меня проблемы с индексацией / сохранением в SDN 2.0.0.RELEASE и Neo4j 1.5.
У меня есть класс домена "Word", который в основном выглядит следующим образом:
@NodeEntity
public class Word {
@GraphId
Long graphId;
@Indexed(indexType = IndexType.SIMPLE, indexName = "Word_wordString")
private String wordString;
@RelatedTo(direction = Direction.INCOMING, elementClass = Sentence.class, type = "HAS")
private Set<Sentence> sentences;
public Word() {
}
public Word(String wordString) {
setWordString(wordString);
}
}
Я сохраняю слова этим методом:
private void persistWord(Sentence sentence, Word word) {
System.out.println("checking index for wordString: "
+ word.getWordString());
Word existingWord = wordRepository.findByPropertyValue(
"wordString", word.getWordString());
if (existingWord != null) {
existingWord.addSentence(sentence);
existingWord.persist();
System.out.println("persisted already existing word "
+ existingWord);
} else {
word.persist();
System.out.println("persisted word " + word);
}
Предполагается проверить, есть ли слово в графе, если это так, я изменяю некоторые атрибуты объекта, возвращаемого wordRepository, затем сохраняю изменения (-> if (существующиеWord! = Нуль)). Если этого слова еще нет на графике, оно просто сохраняется (-> еще).
Это, однако, всегда создает новый узел для каждого слова, даже если оно существует в графе. Так сказать, persist () всегда создает новый узел.
После того, как в графе есть два слова с одинаковыми wordString, метод хранилища выдает:
More than one element in org.neo4j.index.impl.lucene.LuceneIndex$1@1181df3. First element is 'Node[45]' and the second element is 'Node[83]'
Что происходит?
Мне также интересно, в чем разница между IndexType.SIMPLE, IndexType.POINT и IndexType.FULLTEXT. (Его нет ни в API, ни в руководстве «Хорошие отношения»)