1

我已经看过这个问题很多次了,但在这里我问的是同样的问题。

为什么我会收到此错误:

Error running query. Reason: (no_usable_index) No index exists for this sort try indexing by the sort fields.

我正在运行一个带有超级账本结构的区块链服务,并且我正在使用 CouchDB for the World State。在这些数据中,我有一个日期字段,我想按日期对数据进行排序。这是我的芒果查询:

{
   "selector": {
      "date": {
         "$gte": null
      },
      "_id": {
         "$gte": null
      }
   },
   "fields": [
      "_id",
      "date"
   ],
   "sort": [
      {
         "date": "asc"
      }
   ]
}

值得一提的是,日期是一个字符串。我不知道这里发生了什么,因为我尝试了一切。我尝试使用表格的任何字段进行排序,但唯一要排序和工作的是该字段:_id

我什至尝试了_rev再次_id出现错误的字段。

{
   "selector": {
      "_rev": {
         "$gte": null
      },
      "_id": {
         "$gte": null
      }
   },
   "fields": [
      "_id",
      "_rev"
   ],
   "sort": [
      {
         "_id": "asc"
      },
      {
         "_rev": "asc"
      }
   ]
}

这是我的数据示例:

{
 "id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
 "key": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
 "value": {
  "rev": "1-4f2cc5b932d393a88b3497a3942fff33"
 },
 "doc": {
  "_id": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
  "_rev": "1-4f2cc5b932d393a88b3497a3942fff33",
  "company": "greenTea",
  "date": "2022-02-04 15:40:23.337 +0000 UTC",
  "fromacc": "Gary",
  "operation": "",
  "txid": "438c5ad0868db83201bdc36edb7705e3081c73821b20d14d4c4251af3e49c04e",
  "type": "transaction",
  "~version": "CgMBBwA="
 }
}

我已经尝试了我在网上找到的任何东西,但我无法让它工作。任何帮助或建议,甚至是好的文档都将不胜感激。

谢谢

4

1 回答 1

2

除了收集结果所需的全表扫描之外,想象一下如果有 100 亿个文档要在内存中排序会发生什么。

date如果要对字段进行排序,则需要创建索引。

只需添加这样的索引。

{
   "index": {
      "fields": [
         "date"
      ]
   },
   "name": "date-index"
}

你会发现这个查询成功了:

{
   "selector": {
      "date": {
         "$gte": null
      },
      "_id": {
         "$gte": null
      }
   },
   "fields": [
      "_id",
      "date"
   ]
}

这个查询可能有一些效率

{
   "selector": {
      "date": {
         "$gte": 9
      },
      "_id": {
         "$gte": 9
      }
   },
   "fields": [
      "_id",
      "date"
   ]
}

由于两个字段都是字符串类型,请参见3.2.2.5。整理规范

于 2022-02-11T16:57:26.000 回答