2013-12-09 27 views
6

Kullanıcıların ve aradıkları öğelerin bir grafiğim var.cypher/neo4j ile dizi değerlerinin karşılaştırılması

Bu veriler, benzer üyelerin baktığı öğelere dayalı öğeler önermek için kullanılacaktır. Öğelerin renklerinin ne kadar benzer olduğuna göre öğeleri sıralamak istiyorum. Renkler bir dizi içindeki öğeler üzerinde saklanır (["kırmızı", "mavi", "yeşil"]). Ne kadar ortak elemente sahip olduklarını görmek için dizileri karşılaştırmanın herhangi bir yolu var mı?

cevap

8

Verilen iki düğüm gibi bir şey, n ve m,: Böyle bir şey yapabiliriz

CREATE ({id: 1, color: ["red", "blue", "green", "yellow"]}) 
CREATE ({id: 2, color: ["red", "blue", "green", "white"]}) 

: n.color dizi üzerinden

MATCH n, m 
WHERE n.id = 1 AND m.id = 2 
RETURN length(FILTER(x in n.color WHERE x in m.color)) 

FILTER fonksiyon yinelediğinden bağlama Geçerli değer x (benim tarafımdan rastgele seçilebilir, farklı olabilir). Her bir x değeri için (x in m.color) yüklemi denetlenir ve true olarak değerlendirilirse, bu öğe FILTER'un döndürdüğü yeni diziye eklenir. İki dizinin kesişimini (bu durumda kırmızı, mavi ve yeşil) görmek için onu bırakabilir veya iki düğüm arasında paylaşılan renk sayısını görmek için length işlevine sarın (bu durumda 3) .

Kontrol burada tam FİLTRE docs: http://docs.neo4j.org/chunked/milestone/query-functions-collection.html#functions-filter

+1

açıklama ile iyi yanıt için 1, ancak (cevap sürüm 2.0 varsayar beri, hem de belki) özellikleri ile maç kullanın: 'MAÇ (n {id: 1}) ve cetera. – jjaderberg

+0

Ah evet. Bu sözdizimini desteklemeyen, ancak iyi bir çağrı olan 2.0 (M06) bir kilometre taşı kullanıyorum. –

+0

sonunda "uzunluk" ifadesini kullandınız, ancak sorgudaki "sayı" ifadesi gerçekten anlamlı değil - sonuçların sayısını döndürecek. –

İlgili konular