검색어가 OR
으로 가득 차 있습니다. 즉, Job
은 (해당 배열에 두 개의 data5 속성이 포함 된 경우) 일치합니다. 와 일치 시키려면 제공된 기준의을 입력 한 다음 OR
을 AND
s로 바꿉니다. 제공하는 데이터에 따라 NULL 값과 빈 목록을 조심해야합니다.
편집 - 예제 코드
이 내가 아마 당신이 얘기 필드를 일치 생각 쿼리의 작은 부분이다.
WHERE x.city IN {data1} OR x.role IN {data5}
그것은 나에게 어떤 노드와 일치 말한다 (x)를 WHERE X X 개발자의 역할입니다 방갈로르 또는입니다. 당신이 방갈로르와 개발자 모두 만 기록과 일치하는 검색어를 원하는 경우 쿼리의 해당 섹션은 다음과 같아야합니다
WHERE x.city IN {data1} AND x.role IN {data5}
x.categories 조금 너무 좌초 것 (당신은 아무것도하지만, 쿼리하지 않는 그 존재).
편집 - 포스트 채팅
요구 사항은 각 쿼리는 이전 결과에 필터 역할을 어디 연속 쿼리를 수행하는 것입니다. 모든 필드는 각 통화와 다시 매칭됩니다. 이를 수행하려면 조회를 체인화하고 각 일련의 조회에 ID 세트를 전달하는 데 사용할 수있는 외부 노드 ID가 필요합니다. 사이퍼에서 감소 된 예 :
초기 쿼리 :
MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.title=~{searchString} OR j.description=~{searchString}
RETURN j.jobId, j.title, j.description, j.city, m.companyName
후속 쿼리 :
MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.jobId IN {collectionOfJobIds}
AND (j.title=~{searchString} OR j.description=~{searchString})
RETURN j.jobId, j.title, j.description, j.city, m.companyName
편집 - 당신은 당신의 데이터를 재대 결을 할 수 있습니다 나에게
도청이되기 때문에 각 검색어에 대해 필터를 사용할 수 있습니다.
MATCH (j:Job)<-[:POSTED_JOB]-(m)
WHERE j.title=~({searchStrings}[0]) OR j.description=~({searchStrings}[0])
WITH m, COLLECT(j) as jobs
WITH m, FILTER (j IN jobs WHERE j.title=~({searchStrings}[1]) OR j.description=~({searchStrings}[1]) as filteredJobs
RETURN m, jobs
이렇게하려면 searchString을 배열로 전달해야하며 원하는만큼 WITH를 추가 할 수 있습니다 (배열 인덱스를 늘리십시오).이 모든 쿼리를 사용하면 매우 많은 작업이있는 경우 시스템에서 모든 작업을 일치시켜 시작할 때 속도가 느려질 것이라는 것을 인식하는 것이 중요합니다. 초기 경기에 제한을두면 인생이 나아질 것입니다!
ASIDE : 당신의 모델은 City, Sector, Skills 등을 속성이 아닌 노드로 모델링 할 수있는 위치에 실제로 그래프가 아닙니다.
감사합니다. @ JohnMark13 나는 당신이 말하려고하는 것을 얻지 못하고 있습니다. 예를 들어 자세히 설명해 주시겠습니까? –
@Stefan Armbruster 제발 도와주세요 –
당신이 이해하지 못하는 것이 무엇인지 설명해 주시겠습니까? – JohnMark13