首页 > 解决方案 > 为什么此复合辅助沙发库索引仅与创建查询中的第一个字段匹配

问题描述

我使用这个查询为我的订单桶创建了一个复合索引:

CREATE INDEX idx_customer ON `order` (
buyer.contact.firstName, 
buyer.contact.lastName, 
ALL DISTINCT ARRAY aoc.`value` FOR aoc IN buyer.contact.communicationChannel
WHEN aoc.`communicationChannelCode`= "EMAIL" END)
WHERE _class = "com.lbk.entities.OrderEntity"

当我搜索buyer.contact.firstName 时,查询与索引匹配,但对于buyer.contact.lastName 却失败了。基本上它匹配查询中的第一个字段。

以下是失败字段 (buyer.contact.lastName) 的解释结果:

{
  "plan": {
    "#operator": "Sequence",
    "~children": [
      {
        "#operator": "PrimaryScan3",
        "index": "#primary",
        "index_projection": {
          "primary_key": true
        },
        "keyspace": "order",
        "namespace": "default",
        "using": "gsi"
      },
      {
        "#operator": "Fetch",
        "keyspace": "order",
        "namespace": "default"
      },
      {
        "#operator": "Parallel",
        "~child": {
          "#operator": "Sequence",
          "~children": [
            {
              "#operator": "Filter",
              "condition": "(((((`order`.`buyer`).`contact`).`lastName`) = \"jj\") and ((`order`.`_class`) = \"com.lbk.entities.OrderEntity\"))"
            },
            {
              "#operator": "InitialProject",
              "result_terms": [
                {
                  "expr": "(((`order`.`buyer`).`contact`).`lastName`)"
                }
              ]
            },
            {
              "#operator": "FinalProject"
            }
          ]
        }
      }
    ]
  },
  "text": "SELECT buyer.contact.lastName FROM `order` where buyer.contact.lastName = 'jj'\nAND (`_class` = \"com.lbk.entities.OrderEntity\")"
}

企业版 5.5.1 build 3511

标签: indexingcouchbasen1ql

解决方案


要使用索引,查询谓词必须具有前导索引键作为谓词。Couchbase 存储桶可以有任何类型的文档,并且没有模式。当文档中的前导索引键缺失时,索引器不会索引。如果前导索引键上没有谓词,则查询也必须包含 MISSING 值,因此该索引将不符合该查询的条件并且不会被使用。

在您的情况下,如果可以,请添加以下内容之一来查询谓词。

1) AND buyer.contact.firstName IS NOT MISSING
2) AND buyer.contact.firstName IS NOT NULL
3) AND buyer.contact.firstName IS VALUED

在https://blog.couchbase.com/n1ql-practical-guide-second-edition/中查看“在 Couchbase N1QL 中为查询设计索引”


推荐阅读