在Couchbase中对多个属性进行排序和过滤

时间:2013-12-20 12:12:31

标签: couchbase couchbase-view

我有一个包含多个不同属性的文档。在我的应用程序中,我想对其中一个doc属性进行过滤,并按任何其他属性进行排序。

  

{
    “accountId”:“qa32176148”,
    “id”:“122230310111”,
    “rtSessionId”:“qa321761484294973207”,
    “sessionStartTime”:1387705538426,
    “visitorLastUpdateTime”:1387705717094,
    “countryCode”:“US”,
    “州”:“纽约”,
    “城市”:“纽约”,
    “国家”:“美国”,
    “组织”:“谷歌”,
    “ipAddress”:“216.239.39.99”,
    “agentNickName”:“john”
  }

  1. 我想按这些字段中的每一个进行过滤,我应该为每个字段创建一个视图吗?
  2. (作为示例)我可以通过城市提交状态和排序吗?

1 个答案:

答案 0 :(得分:1)

  1. 基本上,是的,您需要为每个属性创建单独的视图(如果您希望仅使用一个属性进行过滤)。如果您还需要能够在一个查询中按两个或多个属性过滤结果,则每个属性组合还需要一个视图。但是我不明白你的意思是什么composite index(如果你看到一些例子,可能会因为你的表现而变得更好)。据我了解复合索引,它根本不适应这种情况。

  2. 是的,在大多数情况下。但是,只有在您希望与属性X完全匹配时才能这样做,即X == 1(不是范围:X == 1 ... 6)。要按Y属性排序,只需在X属性后将其附加到您的emit函数: emit([X,Y], null)并使用startKeyendKey参数。即startKey=[1]endkey=[1,{}]

  3. 现在我回到你的第一个问题。我认为这种情况用于某种搜索操作。因此elasticsearch有一个很好的沙发基础扩展(另请参见此page),这将使您在过滤和排序方面更具灵活性,而无需创建多个视图。