在 Cloudant noSQL 数据库中搜索多个参数

Searching many parameters in a Cloudant noSQL DB

我在 Bluemix 上使用 Cloudant 数据库将产品存储在 Node.js 服务器中。这些产品将按类别搜索。查找只有一个类别的产品不会有问题,因为搜索是通过将作为搜索参数发送的字符串与数据库中保存的类别字符串进行比较来进行的。当产品有两个或更多类别时,就会出现问题。在进行字符串与字符串的比较时,它永远不会重合。

产品可以根据需要拥有任意多个类别。

有什么想法吗?

如果我没有正确理解您的问题,您可能希望将 category 存储为字符串数组并为数组中的每个元素建立索引。然后,您可以针对单个或多个类别搜索产品。

例如,给定以下文档:

文档 1

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

文档 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

这将 return 产品 1 和产品 2 或:

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

这 return 只有 product2。

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

您应该在 "category" 参数

中的 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 Query 查询文档

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