2016-04-25 11 views
0

私はcouch dbのビュー(http://wiki.apache.org/couchdb/HTTP_view_API#HTTP_View_APIhttp://www.barkingiguana.com/2009/01/22/filtering-and-ordering-couchdb-view-results/)のドキュメントを読んできましたが、私が探しているものは見つかっていないと思いますそれはサポートされていません。couch dbの地図のキーと値のペアの照会

私はソファのデータベース

{ 
    "_id": "UUID", 
    "_rev": "rev", 
    "status": "complete", 
    "csv": [ 
      { 
       "Lower": 0.09, 
       "Upper": 0.31 
      } 
    ], 
    "tags": { 
     "get_info": { 
      "duration": "24", 
      "location": "south" 
     } 
    } 
} 

{ 
    "_id": "2-UUID", 
    "_rev": "2-rev", 
    "status": "complete", 
    "csv": [ 
      { 
       "Lower": 0.01, 
       "Upper": 0.70 
      } 
    ], 
    "tags": { 
     "different_info": { 
      "duration": "60", 
      "location": "south" 
     } 
    } 
} 

に二つのレコードを持っているが、それは、ビューを作成し、タグ「キー」を持っているすべてのレコードを返すクエリパラメータを追加することが可能です: "値"(例えば、私はすべてのレコードに "duration"というタグを付けたい:24またはすべてのレコードに "location": "south"タグを付ける)。ビューにキー/値をハードコーディングする必要はありません。クエリで渡す必要があります。

ビューではない別の考え方がありますか?これを達成する

答えて

1

一つの方法は、[ key, value ]を使用して配列としてあなたのビュー内のすべてのタグを放出することである:key=["duration","24"]

function (doc) { 
    for (var type in doc.tags) { 
    for (var tag in doc.tags[type]) { 
     emit([ tag, doc.tags[type][tag] ]); 
    } 
    } 
} 

あなたが特定のペアを使用してビューを照会することができます。 startkeyendkeyで範囲検索を行うこともできます。

POSTの代わりにkeys[]=["duration","24"]&keys[]=["location","south"]を選択すると、キーのリストを指定できます。しかし、この方法では、遠隔検索を行う能力が失われます。 (少なくともatm)

このように複数のキーを照会すると、いずれかのキーに一致するすべてのドキュメントが取得されるため、クライアント側で結果を重複排除する必要が生じる場合があります。

CouchDBビューは、計算やアルゴリズムに関するもので、任意のクエリや検索に最適なものではありません。そのため、couchdb-luceneelasticsearchなどの検索レイヤーを追加することを強くおすすめします。