Поле типа long не индексируется с помощью spring-data-neo4j

Именно так, как говорится в названии. Я создал POJO с аннотациями @NodeEntity, и в нем у меня есть поле, которое я хочу использовать в качестве идентификатора, который является long, который я хотел бы индексировать и искать.

Когда я сохраняю свой POJO с помощью neo4jTemplate, он сохраняется нормально, и я вижу, как neo4j создает имя индекса для моего класса, но когда я пытаюсь запросить индекс, я ничего не получаю.

Я пробовал поле как с int, так и с long, но ни один из них не работает. При запросе я пробовал как 1, 1l, так и "1", но ни один из них не возвращает мой Node.

Я могу подтвердить, что индекс можно создать с ключом/значением, где значение равно int или long, и они работают нормально.

кто-нибудь еще сталкивался с этим?


person Nicholas    schedule 17.06.2012    source источник


Ответы (1)


Возможно, в SDN примитивы индексируются как числовые, что имеет особое значение в Lucene (индекс выбора по умолчанию для neo4j), и они должны быть запросами аналогичным образом, чтобы их можно было найти... а именно с запросами числового диапазона. Я не знаю, как это будет выглядеть в SDN, но с помощью org.apache.lucene.search.NumericRangeQuery для создания объектов Query для поиска диапазонов примитивов (например, int или long) их можно запрашивать.

person Mattias Finné    schedule 17.06.2012
comment
Это сработало. Он чувствителен к типу, поэтому, если вы сохраните в БД как int и сделаете NumericRangeQuery типа long, он вернет false, но пока вы получаете правильный тип, он работает. - person Nicholas; 17.06.2012
comment
Я нашел способ изменить это. В настоящее время я использую SDN 2.1.0-SNAPSHOT, не уверен, есть ли он также в 2.0.1-RELEASE, но в аннотации @Indexed есть поле numeric, которое по умолчанию имеет значение true, отключение которого позволяет выполнять точные и диапазонные запросы. - person Nicholas; 18.06.2012