在Cloudant上搜索每个用户一个doc

时间:2016-04-06 02:09:56

标签: lucene cloudant

我有一个包含多个文档的数据库。每个doc都有一个user_id字段。 假设这些文档属于两个用户:1和2。 我想为每个用户提取一个最新的doc。我该如何实现搜索索引? 我现在可以使用:user_id:1来获取用户的所有文档 但是,如何在一个查询中将每个用户的文档编号限制为一个?

1 个答案:

答案 0 :(得分:0)

假设您在每个文档上都有一个日期属性,您可以按如下方式完成此操作:

创建以下索引:

{
   "index": {
      "fields": [
         {"user_id":"desc"},
         {"date_field":"desc"}
      ]
   },
   "type": "json"
}

要查询user_id ==“1”的最新文档,您的查询将如下所示:

{
   "selector": {
      "user_id": "1"
   },
   "fields": [
      "_id",
      "user_id",
      "date_field"
   ],
   "sort": [
      { "user_id": "desc" },
      { "date_field": "desc" }
   ],
   "limit":1
}

如果您尝试在单个查询中返回多个用户,则必须执行以下操作:

  1. 添加名为latest或类似
  2. 的媒体资源
  3. user_idlatest上添加索引:

    {
       "index": {
          "fields": [
             "user_id",
             "latest"
          ]
       },
       "type": "json"
    }
    
  4. 每当您添加新文档时,请找到user_idlatest的文档:

    {
       "selector": {
          "user_id": "1",
          "latest" : true
       },
       "fields": [
          "_id",
          "user_id",
          "latest"
       ]
    }
    
  5. 在该文件上设置latest = false

  6. 使用latest = true
  7. 插入新文档
  8. 此查询将为所有用户找到最新的文档:

    {
       "selector": {
          "user_id": {"$gt":null},
          "latest" : true
       },
       "fields": [
          "_id",
          "user_id",
          "latest"
       ]
    }