在一个Cloudant noSQL数据库中search许多参数

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

产品可以有他们需要的种类。

有任何想法吗?

如果我正确理解你的问题,你可能想要将category存储为一个string数组并索引数组中的每个元素。 然后您可以针对单个或多个类别search产品。

例如,给出以下文件:

doc 1

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

doc 2

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

您可以设置一个search索引类似于:

 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/

您应该在“category”参数中以数组格式在Cloudant数据库中存储一个或多个类别

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

那么你应该创build一个search索引

 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