Wygląda na to, że LIKE nie jest obsługiwane w zapytaniach Cyphera.Klauzula LIKE w CYPHER Zapytanie
Czy istnieje inny konstrukt, który wykonałby to samo zadanie?
Na przykład:
start n = node(*) where n.Name LIKE('%SUBSTRING%') return n.Name, n;
Wygląda na to, że LIKE nie jest obsługiwane w zapytaniach Cyphera.Klauzula LIKE w CYPHER Zapytanie
Czy istnieje inny konstrukt, który wykonałby to samo zadanie?
Na przykład:
start n = node(*) where n.Name LIKE('%SUBSTRING%') return n.Name, n;
za pomocą wyrażeń regularnych: http://neo4j.com/docs/developer-manual/current/#query-where-regex
start n = node(*) where n.Name =~ '.*SUBSTRING.*' return n.Name, n;
Obawiałem się, że odpowiedzią może być regex. Groans;) Mimo to sprawia, że jest on potężniejszy niż zwykły LIKE – johnc
tak, jestem także zaniepokojony regexp, ale jest to teraz bezpośrednia droga. ale nadal możesz używać indeksu luceńskiego w następujący sposób: 'start n = node: your_index ('property: * SUBSTRING *') return n.name, n;' – ulkas
i użyj parametrów zamiast wartości literalnych: 'start n = node (*) gdzie n.Nazwa = ~ {like} return n.Nazwa, n; 'params: {" jak ":". * PODKRETNA. * "}, również węzeł (*) jako podpowiedź do klauzuli startowej na nie-wykresie use-case, a następnie raczej użyj sugestii wyszukiwania indeksów ulkas –
Jeśli chcesz, aby to sprawa niewrażliwe
MATCH (n) WHERE n.name =~ '(?i).*SUBSTRING.*' RETURN n;
tak, ale wydajność jest do bani! – ekkis
Bardzo dziękuję :) – JochemQuery
Brak konieczności Wyrażenia regularne:
start n = node(*) where n.Name contains "substring" return n.Name, n;
idź do the cypher refcard i przewiń w dół do sekcji orzeczników. Znajdziesz to i inne przydatne rzeczy.
Chcesz bez uwzględniania wielkości liter? Konwersja do małymi literami:
start n = node(*) where lower(n.Name) contains lower("substring") return n.Name, n;
Niestety, wielkość liter jest rozróżniana i nie ma wersji bez rozróżniania wielkości liter. ugh! – ekkis
Naprawiono @ekkis, patrz edycja. –
tak, to zadziała, podobnie jak "= ~" (? I) substring'', ale nie działa dobrze. lower() zapobiega używaniu indeksu, więc na dużych danych po prostu się zawiesi. Mam otwartą prośbę o funkcję tutaj: https://github.com/neo4j/neo4j/issues/9450 – ekkis
refcard jest naprawdę przydatna rzecz do zakładki: http://neo4j.com/docs/cypher-refcard/current/ Wymienia wszystkie obsługiwane ciąg pasujący operatorów na przykład. –