【问题标题】:Cloudant database search indexCloudant 数据库搜索索引
【发布时间】:2022-11-02 19:29:53
【问题描述】:

我在 cloudant 中有一个 Json 文档:

{
 "createdAt": "2022-10-26T09:16:29.472Z",
 "user_id": "4499c1c2-7507-4707-b0e4-ec83e2d2f34d",
 "_id": "606a4d591031c14a8c48fcb4a9541ff0"
}
{
 "createdAt": "2022-10-24T11:15:24.269Z",
 "user_id": "c4bdcb54-3d0a-4b6a-a8a9-aa12e45345f3",
 "_id": "fb24a15d8fb7cdf12feadac08e7c05dc"
}
{
 "createdAt": "2022-10-24T11:08:24.269Z",
 "user_id": "06d67681-e2c4-4ed4-b40a-5a2c5e7e6ed9",
 "_id": "2d277ec3dd8c33da7642b72722aa93ed"
}

我创建了一个索引json作为:

{
 "type": "json",
 "partitioned": false,
 "def": {
  "fields": [
   {
    "createdAt": "asc"
   },
   {
    "user_id": "asc"
   }
  ]
 }
}

我创建了一个索引文本作为:

{
 "type": "text",
 "partitioned": false,
 "def": {
  "default_analyzer": "keyword",
  "default_field": {},
  "selector": {},
  "fields": [
   {
    "_id": "string"
   },
   {
    "createdAt": "string"
   },
   {
    "user_id": "string"
   }
  ],
  "index_array_lengths": true
 }
}

我创建了一个选择器模糊查询

{
   "selector": {
      "$and": [
         {
            "createdAt": {
               "$exists": true
            }
         },
         {
            "user_id": {
               "$exists": true
            }
         }
      ]
   },
   "fields": [
      "createdAt",
      "user_id",
      "_id"
   ],
   "sort": [
      {
         "createdAt": "desc"
      }
   ],
   "limit": 10,
   "skip": 0
}

此代码在 cloudant 环境中运行良好。

我的问题在搜索索引中。

我创造了这个功能有效的代码,

function (doc) {
  index("specialsearch", doc._id);
  if(doc.createdAt){
    index("createdAt", doc.createdAt, {"store":true})
  }
  if(doc.user_id){
    index("user_id", doc.user_id, {"store":true})
  }
}

这个网址的结果:

// https://[user]-bluemix.cloudant.com/[database]/_design/attributes/_search/by_all?q=*:*&counts=["createdAt"]&limit=2
{
    "total_rows": 10,
    "bookmark": "xxx",
    "rows": [
        {
            "id": "fb24a15d8fb7cdf12feadac08e7c05dc",
            "order": [
                1.0,
                0
            ],
            "fields": {
                "createdAt": "2022-10-24T11:15:24.269Z",
                "user_id": "c4bdcb54-3d0a-4b6a-a8a9-aa12e45345f3"
            }
        },
        {
            "id": "dad431735986bbf41b1fa3b1cd30cd0f",
            "order": [
                1.0,
                0
            ],
            "fields": {
                "createdAt": "2022-10-24T11:07:02.138Z",
                "user_id": "76f03307-4497-4a19-a647-8097fa288e77"
            }
        },
        {
            "id": "2d277ec3dd8c33da7642b72722aa93ed",
            "order": [
                1.0,
                0
            ],
            "fields": {
                "createdAt": "2022-10-24T11:08:24.269Z",
                "user_id": "06d67681-e2c4-4ed4-b40a-5a2c5e7e6ed9"
            }
        }
    ]
}

但它不返回ID根据日期按日期排序创建时间用户身份键。

我想要的是获得一个有组织的搜索列表,其中包含创建时间用户身份无需指明值的键;通配符类型搜索

我哪里错了?

我已经阅读了几篇文章和指南,但我不明白如何去做。

谢谢你的帮助。

【问题讨论】:

    标签: ibm-cloud cloudant


    【解决方案1】:

    你说你想返回一个id列表,createdAt和user_id,按createdAtuser_id排序。并且您希望返回所有文件。

    如果是这种情况,您需要做的只是为您的数据创建一个 MapReduce 视图,该视图按该顺序发出 createdAtuser_id 字段,即:

    function (doc) {
      emit([doc.createdAt, doc.user_id], 1);
    }
    

    您不需要包含文档 ID,因为它是免费提供的。

    然后,您可以通过访问 URL 来查询视图:

    https://<URL>/<database>/_design/<ddoc_name>/_view/<view_name>
    

    你会得到这样的所有文档:

    {"total_rows":3,"offset":0,"rows":[
    {"id":"2d277ec3dd8c33da7642b72722aa93ed","key":["2022-10-24T11:08:24.269Z","06d67681-e2c4-4ed4-b40a-5a2c5e7e6ed9"],"value":1},
    {"id":"fb24a15d8fb7cdf12feadac08e7c05dc","key":["2022-10-24T11:15:24.269Z","c4bdcb54-3d0a-4b6a-a8a9-aa12e45345f3"],"value":1},
    {"id":"606a4d591031c14a8c48fcb4a9541ff0","key":["2022-10-26T09:16:29.472Z","4499c1c2-7507-4707-b0e4-ec83e2d2f34d"],"value":1}
    ]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多