2015-02-23 65 views
0

我們正在使用neo4j-community-2.1.2。現在我們只有3個節點的作業標籤在數據庫中我們對此查詢中使用的所有字段進行了架構索引。總DB點擊約40 查詢 - >Neo4j Cypher中where子句的多個匹配給出錯誤「不能匹配僅包含已綁定標識符的模式」

PROFILE match (job1:Job) where (job1.jobType="Adhoc" or job1.jobType="Virtual") AND (job1.mode="Free" or job1.mode="Paid") with collect(job1) as jobs1  
    match (job2:Job)-[REQUIRED_SKILL]-(skill:Skill) where skill.name="Neo4j" and (job2 in jobs1) with collect(job2) as jobs2 
    match (job3:Job)-[REQUIRED_SKILL]-(skill:Skill) where skill.name="Java" and (job3 IN jobs2) with collect(job3) as jobs3 return jobs3 

所以我們嘗試做類似的東西

match (job1:Job) where (job1.jobType="Adhoc" or job1.jobType="Virtual") 
match (job1) where (job1.mode="Free" or job1.mode="Paid") with collect(job1) as jobs1 return jobs1 

因爲第一場比賽的結果去下一場比賽。所以,在接下來的過濾器也就只需要過濾較少的節點數目,但我們得到這個異常

Cannot match on a pattern containing only already bound identifiers (line 2, column 1) 
"match (job1) where (job1.mode="Free" or job1.mode="Paid") with collect(job1) as jobs1 return jobs1" 

優化這個查詢

+0

問題的決心。到neo4j-community-2.1.7。不能匹配僅包含綁定標識符的模式 – abhaygarg12493 2015-02-23 10:51:56

回答

2

不能匹配job1兩次,一次是匹配的,你可以使用相同的實例再次(使用WITH),或者在這種情況下,您可以使用AND過濾兩種情況。此外,您的查詢將通過IN納入測試更換OR,像這樣簡單:通過升級的Neo4j社區-2.1.2

match (job1:Job) 
    where job1.jobType in ["Adhoc", "Virtual"] 
    and job1.mode in ["Free", "Paid"] 
return collect(job1) as jobs1