2017-07-10 9 views
1

私は、BluemixのCloudantデータベースをNode.jsサーバのストレージ製品に使用しています。これらの製品はカテゴリ別に検索されます。検索パラメータとして送信された文字列とデータベースに保存されているカテゴリ文字列を比較することで検索が行われるため、カテゴリが1つしかない製品を検索する場合は問題ありません。この問題は、製品に2つ以上のカテゴリがある場合に発生します。文字列と文字列とを比較するときは、決して一致しません。Cloudant noSQL DBの多くのパラメータを検索

製品には、必要な数のカテゴリを含めることができます。

アイデア?

答えて

1

質問を正しく理解している場合は、categoryを文字列の配列として格納し、配列の各要素をインデックスすることができます。 1つまたは複数のカテゴリに対して商品を検索することができます。例えば

、次のドキュメント与えられた:

:あなたがに似て検索インデックスを設定することができ

DOC 1

{ 
    "name": "product1", 
    "category: ["abc"] 
} 

のdoc 2

{ 
    "name": "product2", 
    "category: ["abc", "def"] 
} 

function (doc) { 
    if (doc.category) { 
    for (var i in doc.category) { 
     index("category", doc.category[i], {"store": true, "facet": true}) 
    } 
    } 
} 

あなたは、このようなのようなクエリを実行することがあります。製品1とproduct2 またはその両方を返します

.../{dbname}/_design/{designdocname}/_search/{searchindexname}?q=category:abc

を:

.../{dbname}/_design/{designdocname}/_search/{searchindexname}?q=category:abc+AND+category:def

のみproduct2を返すことになります。

追加情報:https://developer.ibm.com/clouddataservices/cloudant-search/

1

あなたは次にあなたが検索インデックス

function (doc) { 
    if (doc.category) { 
    for (var i in doc.category) { 
     index("category", doc.category[i], {"store": true, "facet": true}) 
    } 
    } 
} 
を作成する必要があり、「カテゴリ」パラメータでCloudantデータベースにアレイ形式で

{ 
    "_id": "producto1", 
    "category: ["TV", "cameras", "computers"] 
} 

を1つ以上のカテゴリを格納する必要があります

クラウドクエリーのドキュメントを照会することができます

{ 
    "selector": { 
    "_id": { 
     "$gt": 0 
    }, 
    "category": { 
     "$all": [ 
     "TV", 
     "cameras" 
     ] 
    } 
    }, 
    "fields": [ 
    "_id", 
    "_rev" 
    ], 
    "sort": [ 
    { 
     "_id": "asc" 
    } 
    ] 
} 

またはあなたが使用することができます

https://{url_database}/{name_database}/_design/{name_design}/_search/{name_search}?q=category:TV 
関連する問題