N1QL-запрос работает даже с отсутствующим предикатом, созданным с использованием вторичного индекса couchbase - PullRequest
1 голос
/ 27 апреля 2020

Я создал вторичный индекс в couchbase:

CREATE INDEX `data` ON `bucket`(`field1`,`field2`,`field3`, lower(`field4`)) WHERE (`field5` = "CONSTANT")

Когда я выполняю этот запрос на couchbase:

select document.* from bucket AS document WHERE document.field5 = "CONSTANT" 
AND document.field1 =  "docId"
and (document.field3 like "%" or 
            lower(document.field4) like "%");

Даже без указания значения для один из ведущих предикатов (field2), запрос все еще работает правильно. Может кто-нибудь объяснить, почему?

Это план запроса, который возвращается при добавлении «EXPLAIN» перед запросом:

    "#operator": "Sequence",
    "~children": [
      {
        "#operator": "Sequence",
        "~children": [
          {
            "#operator": "IndexScan3",
            "as": "document",
            "index": "data",
            "index_id": "6588bcds21b213",
            "index_projection": {
              "primary_key": true
            },
            "keyspace": "bucket",
            "namespace": "default",
            "spans": [
              {
                "exact": true,
                "range": [
                  {
                    "high": "\"docId\"",
                    "inclusion": 3,
                    "low": "\"docId\""
                  }
                ]
              }
            ],
            "using": "gsi"
          },
          {
            "#operator": "Fetch",
            "as": "document",
            "keyspace": "bucket",
            "namespace": "default"
          },
          {
            "#operator": "Parallel",
            "~child": {
              "#operator": "Sequence",
              "~children": [
                {
                  "#operator": "Filter",
                  "condition": "((((`document`.`field5`) = \"CONSTANT\") and ((`document`.`field1`) = \"docId\")) and (((`document`.`field3`) like \"%\"]) or (lower((`document`.`field4`)) like \"%\")))"
                },
                {
                  "#operator": "Project",
                  "result_terms": [
                    {
                      "expr": "`document`",
                      "star": true
                    }
                  ]
                }
              ]
            }
          }
        ]
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...