【问题标题】:documentdb indexing for a single property单个属性的 documentdb 索引
【发布时间】:2016-05-10 14:29:11
【问题描述】:

我正在尝试仅对 ExpireDate 属性进行范围索引。我写了以下索引。这是正确的吗?

如果我设置自动 = false,我将无法查询。但是,我担心的是,因为自动 = true,所有级别的所有属性都被索引,这是我不想要的。

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/ExpireDate/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/"
    }
  ]
}

【问题讨论】:

  • 设置为 false 时会出现什么错误? ExpireDate 属性的数据类型是什么?最后我记得,DocDB 不支持日期时间范围查询——尽管这可能最近发生了变化。
  • 我已将它们设为 unixdate 时间。所以它们实际上是长值。

标签: sql azure azure-cosmosdb document-database


【解决方案1】:

如果 ExpireDate 是一个数字,那么这是正确的。如果它表示为字符串,例如ISO-8601,您希望在字符串和数字上将索引设置为 Range,即像下面的存根一样。注意这是配置

    {
      "path": "/ExpireDate/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        },
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
}

在大多数情况下,Automatic 应设置为 true。它指示 documents 是否应在默认情况下选择加入索引。如果这是错误的,则需要在文档写入时间显式传入 IndexingDirective.Include。如果设置为 true,则需要传入 IndexingDirective.Exclude 以明确排除文档。只有上述规则涵盖的路径(默认为所有内容,在本例中为 ExpireDate)才会被索引,而不管自动 true/false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2016-03-03
    • 2013-06-16
    • 1970-01-01
    相关资源
    最近更新 更多