2013-12-09 5 views
6

나는 구성원의 그래프와 살펴본 항목이 있습니다.cypher/neo4j의 배열 값 비교

이 데이터는 비슷한 회원이 보았던 항목을 기반으로 항목을 추천하는 데 사용됩니다. 항목의 색상이 얼마나 비슷한가에 따라 항목을 정렬하고 싶습니다. 색상은 배열의 항목에 저장됩니다 ([ "red", "blue", "green"]). 사이퍼에 배열을 비교하여 공통된 요소의 수를 확인하는 방법이 있습니까?

답변

8

을 감안할 때 두 개의 노드 같은 것을 보면, n과 m : 당신은 이런 식으로 뭔가를 할 수

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

다음 n.color의 배열을 통해

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

FILTER 기능의 반복을 바인딩 현재 값은 x (임의로 선택한 것으로, 다를 수 있음). 각 x 값에 대해 술어 (x in m.color)가 점검되고, 참으로 평가되면 해당 요소는 FILTER이 리턴하는 새 배열로 푸시됩니다. 두 개의 배열 (이 경우 빨강, 파랑 및 녹색)의 교차 부분을 보거나 두 개의 노드 (이 경우 3 개) 사이에 공유되는 색상의 수를 보려면 length 함수로 둘러 쌀 수 있습니다. .

체크 아웃 여기에 전체 필터 문서 : http://docs.neo4j.org/chunked/milestone/query-functions-collection.html#functions-filter

+1

설명과 함께 좋은 답변 +1,하지만 (대답은 버전 2.0을 가정하기 때문에,뿐만 아니라 수도가) 속성과 일치를 사용 : 'MATCH (N {ID : 1}) 등등. – jjaderberg

+0

아 맞습니다. 그 문법을 지원하지 않는 2.0 (M06)의 이정표 릴리스를 사용하고 있지만 좋은 호출입니다. –

+0

끝에'length'라고 쓰여 있지만 쿼리의'count'는 실제로 의미가 없습니다. 결과의 수를 반환 할 것입니다. –