繁体   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