簡體   English   中英

在Cloudant noSQL DB中搜索許多參數

[英]Searching many parameters in a Cloudant noSQL DB

我正在Bluemix上使用Cloudant數據庫將產品存儲在Node.js服務器中。 這些產品將按類別進行搜索。 查找僅具有一個類別的產品將不是問題,因為可以通過將作為搜索參數發送的字符串與數據庫中保存的類別字符串進行比較來進行搜索。 當產品具有兩個或多個類別時,會發生此問題。 在進行字符串與字符串的比較時,它永遠不會重合。

產品可以根據需要具有多個類別。

有任何想法嗎?

如果我正確地理解了您的問題,則可能要將category存儲為字符串數組並為數組中的每個元素建立索引。 然后,您可以針對一個或多個類別搜索產品。

例如,給定以下文件:

文件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})
    }
  }
}

那么您可以運行如下查詢:

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

這將同時返回product1和product2或:

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

只會返回product2。

附加信息: https : //developer.ibm.com/clouddataservices/cloudant-search/

您應該在Cloudant數據庫中的“類別”參數中以數組格式存儲一個或多個類別。

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

然后,您應該創建一個搜索索引

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

現在您可以從Cloudant查詢中查詢文檔

{
  "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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM