2017-09-29 111 views
0

下面的通信字段是較大的json文件的一部分。我試圖索引的字段是code深層嵌套JSON數組的Couchbase N1QL數組索引

"communication": [ 
{ 
    "language": { 
    "coding": [ 
     { 
     "code": "en-US", 
     "system": "http://hl7.org/fhir/ValueSet/languages", 
     "display": "English (United States)" 
     } 
    ] 
    } 
} 
] 

我寫了這個創建索引的代碼和它運行得很好,沒有錯誤

create index `patient_communication_language_coding_code` on 
neuron(distinct array 
      (distinct array c.code for c in v.language.coding end) 
    for v in communication end) 

但是當我嘗試查詢它不選擇索引或使用它..

select * from `neuron` as r use index(patient_communication_language_coding_code) 
where any comm in r.communication satisfies 
    any coding in comm.language.coding satisfies coding.code = 'en-US' 
    end 
end; 

以上查詢是有效的。我以前索引的數組在couchbase中,但這種情況是array.object.array.object這是code字段。沒有語法錯誤。我是我做錯了什麼,或者它不可能索引數組這麼深?

回答

0

我已經在Couchbase論壇發佈了這個問題,並找到了答案。我使用舊Version: 4.6.1-3652 Enterprise Edition (build-3652)

的問題在Version: 4.6.3-4136 Enterprise Edition (build-4136)

+1

在4.6.1 ANY子句中的變量需要匹配在指數使用的變量。在4.6.2+變量中可以是任意的。 https://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/indexing-arrays.html1 select * from'neuron' as r use index(patient_communication_language_coding_code) where any v in r.communication滿足 v.language.coding中的任何c都滿足c.code ='en-US' end end; – vsr