Lucene 在Cloudant上为每个用户搜索一个文档

Lucene 在Cloudant上为每个用户搜索一个文档,lucene,cloudant,Lucene,Cloudant,我有一个包含多个文档的数据库。每个单据都有一个用户id字段。 假设这些文档属于两个用户:1和2。 我只想为每个用户提取一份最新的文档。我应该如何实现搜索索引? 我现在可以使用:user\u id:1获取用户的所有文档 但是如何在一次查询中将每个用户的文档编号限制为一个呢?假设每个文档都有日期属性,则可以按如下方式完成此操作: 创建以下索引: { "index": { "fields": [ {"user_id":"desc"}, {"date

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

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

创建以下索引:

{
   "index": {
      "fields": [
         {"user_id":"desc"},
         {"date_field":"desc"}
      ]
   },
   "type": "json"
}
要查询
用户id
==“1”的最新文档,您的查询如下所示:

{
   "selector": {
      "user_id": "1"
   },
   "fields": [
      "_id",
      "user_id",
      "date_field"
   ],
   "sort": [
      { "user_id": "desc" },
      { "date_field": "desc" }
   ],
   "limit":1
}
如果试图在一个查询中返回多个用户,则必须执行以下操作:

{
   "selector": {
      "user_id": "1"
   },
   "fields": [
      "_id",
      "user_id",
      "date_field"
   ],
   "sort": [
      { "user_id": "desc" },
      { "date_field": "desc" }
   ],
   "limit":1
}
  • 添加名为
    latest
    或类似的属性
  • user\u id
    latest
    上添加索引:

    {
       "index": {
          "fields": [
             "user_id",
             "latest"
          ]
       },
       "type": "json"
    }
    
  • 无论何时添加新文档,都可以找到该
    用户id
    的文档,其中
    最新
    为真:

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

  • 插入
    最新的
    =true的新文档
  • 此查询将查找所有用户的最新文档:

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