2014-07-08 17 views
5

Neo4j veritabanım var (2.0.3). Şu anda veri kümemde bazı test sorguları çalıştırmak için Cypher kullanıyorum. Bir dizi ad içeren bir özelliğe sahip bir kayıt kümem var. Bu dizilerin isimlerini araştırırken, bunu yapmak için temel bir reg-ex'ı da kullanmak istiyorum. Bütün bunlar cypher içinde mümkün mü? Eğer değilse, bu konuda nasıl gidip geliyorsunuz? Bu sorguların her iki birleştirmek istiyorumNeo4j Cypher sorgusu - normal ifadeyle sorgu özellik dizisi

şey: Tüm Kayıtları nerede özelliğinde elemanların herhangi bulmak istiyorsanız

CREATE (:Record {name: ['John', 'Bob']}), 
     (:Record {name: ['Alice', 'Johnny']}), 
     (:Record {name: ['the johnster', 'Charles']}), 
     (:Record {name: ['Danny', 'Josh']}) 

:

MATCH (s:Record) WHERE "John" IN s.name RETURN s; 
MATCH (s:Record) WHERE s.name =~ '(?i).*john.*)' RETURN s; 
+2

eski endeksleri, bireysel girdileri gibi bir dizi özelliği tedavi Sana eski istiyorum inanıyoruz: http://jexp.de/blog/2014/03/full-text-indexing-fts-in-neo4j-2-0/ –

cevap

9

Aşağıdaki örnek verileri göz önünde bulundurun name dizisi bir regexp ile eşleşir, ANY kullanın. Hepsini kapa Belirtilerözellik dizisinde tüm öğeleri bir regexp ile eşleşen tüm kayıtları bulmak istiyorsanız, ALL kullanın.

MATCH (s:Record) 
WHERE ANY(name IN s.name WHERE name =~ '(?i).*john.*') 
RETURN s.name 

Bu döndürür:: Bununla ilgili bir yüksek performanslı versiyonu gerekiyorsa, kontrol yüzden Neo4j ait

s.name 
John, Bob 
Alice, Johnny 
the johnster, Charles 
+2

Mükemmel, teşekkürler Nicole. Sadece başkalarının bu soruna sahip olması. Ben özetlediğim durumda, Nicole dediği gibi, HERHANGİ, doğru anahtar kelimedir. – prees