2012-12-19 47 views
4

我相信一個簡單的問題。我有以下數據。 Couchbase多個按鍵

我想搜索其中ID爲> 2,但< 8的所有行且價格> 30

我已經使用的各種版本:startkey=["2", null]甚至像startkey=["2", "30"]只是用於測試。

它永遠只能似乎運行第一行兩個條件。所以,如果我做的:startkey=["2", "30"]然後我回去:

{"id":"3","key":["3","30"],"value":null}, 
{"id":"4","key":["4","30"],"value":null}, 
{"id":"5","key":["5","20"],"value":null}, 
{"id":"6","key":["6","60"],"value":null}, 
{"id":"8","key":["8","60"],"value":null} 

爲什麼是5行呢?

我開始認爲我需要在代碼(.net)中處理這個問題,並以多種方式進行多個調用......我似乎無法找到任何有效的工具....

注:我已經嘗試過做說環路與for (i = 0; i < doc.ID.length; i++),然後使用doc.ID[i]但它不會返回任何東西....

目前我只是

function (doc, meta) { 
    emit([doc.ID, doc.Price ],null); 
} 

基本上我想有一個搜索哪裏有是用戶擁有的5個輸入鍵。那麼我需要做5次呼叫,然後繼續從之前的輸出中獲取數據作爲下一個的來源?

我已經看過

其他參考文獻包括:提前手動

感謝,

最親切的問候 羅賓

回答

8

這是一個普遍的誤解,與化合物數組索引鍵,它仍然處理作爲一個字符串,因此索引鍵[2,10]實際上是「[2,10]」,而索引鍵[5,20]實際上是「[5,20]」。

所以startkey=["2", "30"]顯示{"id":"5","key":["5","20"],"value":null},行的原因是因爲作爲一個字符串它是> startkey。

同樣,startkey=[2,10]&endkey=[5,10]返回查詢

{"total_rows":7,"rows":[ 
    {"id":"2","key":[2,20],"value":null}, 
    {"id":"3","key":[3,30],"value":null}, 
    {"id":"4","key":[4,30],"value":null} 
    ] 
} 

因爲startkey="[2,10]" < 「[2,20]」 & & 「[4,30]」 < "[5,10]"=endkey,但「[5,20] 「不在該字符串範圍內。

與startkey和endkey

startkey =>endkey範圍查詢是一個範圍查詢中使用的strcmp(),組和組級別是基於所述字符串,其中逗號分隔的字符串令牌。

一個很好的參考鏈接(因爲Couchbase查看工作得如Apache CouchDB視圖(在他們的帶動)) http://wiki.apache.org/couchdb/View_collation#Collation_Specification

空間查看/查詢

要達到你想的結果,你也可以編寫空間視圖以具有多維查詢,僅限數字。雖然你可能沒有最初認爲它

function (doc, meta) { 
    emit({ 
    type: "Point", 
    coordinates: [doc.ID, doc.Price] 
}, meta.id); 
} 

查詢將是一個邊框查詢:

& BBOX = 2,0,8,30

{"total_rows":0,"rows":[ 
    {"id":"2","bbox":[2,20,2,20],"geometry":{"type":"Point","coordinates":[2,20]},"value":"2"}, 
    {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"}, 
    {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"}, 
    {"id":"5","bbox":[5,20,5,20],"geometry":{"type":"Point","coordinates":[5,20]},"value":"5"} 
] 
} 

另一個查詢:

& bbox = 2,30,8,30

{"total_rows":0,"rows":[ 
    {"id":"3","bbox":[3,30,3,30],"geometry":{"type":"Point","coordinates":[3,30]},"value":"3"}, 
    {"id":"4","bbox":[4,30,4,30],"geometry":{"type":"Point","coordinates":[4,30]},"value":"4"} 
] 
} 
+0

嘿夥計。感謝您的閱讀。現在更有意義。我可以按照預期的方式使用這些數字,但如果它確實是一個字符串呢。像空間視圖只適用於數字。如果出現以下情況:a)所有'鑰匙'都是字符串或b)上面有第三列是字符串,但ID和價格都是數字。我應該只爲字符串創建一個視圖,然後用空間視圖加入輸出重新編號? –

+0

忽略評論。使用彈性搜索 –

+0

是否真的有必要使用彈性搜索? –