【问题标题】:Couchbase AND possible?沙发床和可能吗?
【发布时间】:2013-12-03 19:08:44
【问题描述】:

通过 Couchbase 视图或 couchbase 中可用的任何其他方法,可以检索与 WHERE AND 的 SQL 查询等效的结果集。例如下面的 SQL 查询。日期字段将是时间戳:

SELECT * FROM items WHERE category = 'Trips' AND visible = 'EVERYONE' ORDER BY date

似乎对于视图,只有使用 startkey 和 endkey 的复杂键的第一个字段实际上可以限制为一个类别。例如,在下面的视图中,一个复杂的键以第一个值作为开始键和结束键的 Trips 传递,会将结果集限制为仅 Trips 项。唯一的问题是以下键只会对数据进行排序。这是正确的还是我错过了什么?

function (doc, meta) 
{
  if(meta.type == "json" && doc.type == "POST") 
  {
    emit([doc.category, dateToArray(doc.created), doc.visibility], null);
  }
}

是否可以在 Couchbase 中执行上述 SQL 查询,以返回唯一结果满足这两个条件的结果集?

我知道弹性搜索插件。这会提供我想要的功能吗?但是,它是否会以生产环境中的另一个服务器集群为代价,并且由于索引而无法立即获得结果?

【问题讨论】:

    标签: couchdb elasticsearch couchbase


    【解决方案1】:

    如果您需要 WHERE AND(就像在您的 sql 示例中一样),请尝试:

    function (doc, meta) 
    {
      if(meta.type == "json" && doc.type == "POST") 
      {
        emit([doc.category, doc.visibility, dateToArray(doc.created)], null);
      }
    }
    
    startkey = ['Trips', 'EVERYONE']; endkey = ['Trips', 'EVERYONE', {}]
    

    复杂键中的参数排序非常重要。您需要首先放置所有“常量”,因为这些文档的日期会有所不同,并且您在复杂键中放置的所有内容都将被忽略。 浏览这个thread,你会找到关于couchbase index如何工作的答案。

    因此,如果您需要一个或多个字段的完全匹配,您可以使用 couchbase 来实现。如果您需要按多个范围过滤结果(即 doc.price = 100...200 和 doc.category = 1..5),您需要 1)多个视图和应用程序端合并(不好的方式)或 2)弹性搜索插件(更好的方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多