SDN Neo4j Cypher нечувствительный к регистру запрос

У меня есть следующий объект Spring Data Neo4j (3.4.0.RELEASE) со свойством indexed name:

@NodeEntity
public class Decision {

    @Indexed
    private String name;
    ....

Мне нужно реализовать поиск без учета регистра по свойству name.

В моем DecisionRepository я создал следующий метод:

@Query("MATCH (d:Decision) WHERE d.name =~ '(?i){name}' RETURN d")
Decision findByNameIgnoreCase(@Param("name") String name);

но после выполнения я получаю следующее исключение:

org.springframework.dao.InvalidDataAccessApiUsageException: Illegal repetition near index 3
(?i){name}
   ^; nested exception is java.util.regex.PatternSyntaxException: Illegal repetition near index 3
(?i){name}
   ^

Как реализовать правильный поиск без учета регистра по свойству имени?


person alexanoid    schedule 14.11.2015    source источник


Ответы (1)


Я знаю, что это немного сложно, но я думаю, вы можете сделать это, используя этот запрос в аннотации:

MATCH (d:Decision) WHERE LOWER(d.name) = LOWER({name}) RETURN d

Если вы установите оба ваших имени (параметр и значение) ниже, регистр не имеет значения.

Чтобы сделать именно то, что вы хотите (сопоставление регулярных выражений), вы должны использовать //:

MATCH (d:Decision) WHERE d.name =~ /(?i){name}/ RETURN d

Дайте мне знать, если это работает.

person Supamiu    schedule 14.11.2015
comment
Спасибо, с функцией LOWER это работает как шарм! - person alexanoid; 15.11.2015