Indexes

Indexes

Index Definition

GET /api/index

Returns all index definitions as JSON.

Permission Required: cluster.bucket[bucket_name].fts!read

Sample Response
{
    "indexDefs": {
        "implVersion": "4.0.0",
        "indexDefs": {
            "myFirstIndex": {
            "name": "myFirstIndex",
            "params": "",
            "planParams": {
                "hierarchyRules": null,
                "maxPartitionsPerPIndex": 0,
                "nodePlanParams": null,
                "numReplicas": 0,
                "planFrozen": false
             },
             "sourceName": "",
             "sourceParams": "",
             "sourceType": "nil",
             "sourceUUID": "",
             "type": "blackhole",
             "uuid": "6cc599ab7a85bf3b"
          }
       },
       "uuid": "6cc599ab7a85bf3b"
    },
    "status": "ok"
}
GET /api/index/{indexName}

Returns the definition of an index as JSON.

Permission Required : cluster.bucket[bucket_name].fts!read

Parameters

  • indexName: required, string, URL path parameter
    The name of the index definition to be retrieved.
    Sample response
    {
        "indexDef": {
            "name": "myFirstIndex",
            "params": "",
            "planParams": {
                "hierarchyRules": null,
                "maxPartitionsPerPIndex": 0,
                "nodePlanParams": null,
                "numReplicas": 0,
                "planFrozen": false
            },
            "sourceName": "",
            "sourceParams": "",
            "sourceType": "nil",
            "sourceUUID": "",
            "type": "blackhole",
            "uuid": "6cc599ab7a85bf3b"
          },
          "planPIndexes": [
            {
             "indexName": "myFirstIndex",
             "indexParams": "",
             "indexType": "blackhole",
             "indexUUID": "6cc599ab7a85bf3b",
             "name": "myFirstIndex_6cc599ab7a85bf3b_0",
             "nodes": {
                "78fc2ffac2fd9401": {
                  "canRead": true,
                  "canWrite": true,
                  "priority": 0
                }
             },
             "sourceName": "",
             "sourceParams": "",
             "sourcePartitions": "",
             "sourceType": "nil",
             "sourceUUID": "",
             "uuid": "64bed6e2edf354c3"
             }
           ],
           "status": "ok",
           "warnings": []
           }
PUT /api/index/{indexName}

Creates/updates an index definition.

Permission Required : cluster.bucket[bucket_name].fts!write

Parameters

  • indexName: required, string, URL path parameter

    The name of the to-be-created/updated index definition, validated with the regular expression ^[A-Za-z][0-9A-Za-z_\-]*$.

  • indexParams: optional (depends on the value of the indexType), string (JSON), form parameter
    • For indexType alias, an example indexParams JSON:
      {
          "targets": {
              "yourIndexName": {
                  "indexUUID": ""
              }
           }
      }
    • For indexType blackhole, the indexParams can be null.
    • For indexType bleve, an example indexParams JSON:
      {
          "mapping": {
              "default_mapping": {
                  "enabled": true,
                  "dynamic": true,
                  "default_analyzer": ""
               },
               "type_field": "_type",
               "default_type": "_default",
               "default_analyzer": "standard",
               "default_datetime_parser": "dateTimeOptional",
               "default_field": "_all",
               "byte_array_converter": "json",
               "analysis": {}
           },
           "store": {
                "kvStoreName": "boltdb"
           }
           }
  • indexType: required, string, form parameter

    Supported index types include:
    • alias: an alias provides a naming level of indirection to one or more actual, target indexes
    • blackhole: a blackhole index ignores all data and is not queryable; used for testing
    • bleve: a full-text index powered by the bleve engine
  • planParams: optional, string (JSON), form parameter

  • prevIndexUUID: optional, string, form parameter

    Intended for clients that want to check that they are not overwriting the index definition updates of concurrent clients.

  • sourceName: optional, string, form parameter

  • sourceParams: optional (depends on the value of the sourceType), string (JSON), form parameter

    For sourceType couchbase, an example sourceParams JSON:
    {
                  "authUser": "",
                  "authPassword": "",
                  "authSaslUser": "",
                  "authSaslPassword": "",
                  "clusterManagerBackoffFactor": 0,
                  "clusterManagerSleepInitMS": 0,
                  "clusterManagerSleepMaxMS": 20000,
                  "dataManagerBackoffFactor": 0,
                  "dataManagerSleepInitMS": 0,
                  "dataManagerSleepMaxMS": 20000,
                  "feedBufferSizeBytes": 0,
                  "feedBufferAckThreshold": 0
    }
  • sourceUUID: optional, string, form parameter

  • result on error: Non-200 HTTP error code

  • result on success: HTTP 200 with body JSON of {"status": "ok"}

DELETE /api/index/{indexName}

Deletes an index definition.

Permission Required : cluster.bucket[bucket_name].fts!write

Parameters
  • indexName: required, string, URL path parameter

    The name of the index definition to be deleted.

Index Management

POST /api/index/{indexName}/ingestControl/{op}

Pause index updates and maintenance (no more ingesting document mutations).

Permission Required : cluster.bucket[bucket_name].fts!manage

Parameters
  • indexName: required, string, URL path parameter

    The name of the index whose control values will be modified.

  • op: required, string, URL path parameter

    Allowed values for op are "pause" or "resume".

POST /api/index/{indexName}/planFreezeControl/{op}

Freeze the assignment of index partitions to nodes.

Permission Required : cluster.bucket[bucket_name].fts!manage

Parameters
  • indexName: required, string, URL path parameter

    The name of the index whose control values will be modified.

  • op: required, string, URL path parameter

    Allowed values for op are "freeze" or "unfreeze".

POST /api/index/{indexName}/queryControl/{op}

Disallow queries on an index.

Permission Required : cluster.bucket[bucket_name].fts!manage

Parameters
  • indexName: required, string, URL path parameter

    The name of the index whose control values will be modified.

  • op: required, string, URL path parameter

    Allowed values for op are "allow" or "disallow".

Index Monitoring

GET /api/stats

Returns indexing and data related metrics, timings and counters from the node as JSON.

Permission Required : cluster.bucket[bucket_name].stats!read

Sample response
{
    "feeds": {
        "myFirstIndex_6cc599ab7a85bf3b": {}
    },
    "manager": {
        "TotCreateIndex": 1,
        "TotCreateIndexOk": 1,
        "TotDeleteIndex": 0,
        "TotDeleteIndexOk": 0,
        "TotIndexControl": 0,
        "TotIndexControlOk": 0,
        "TotJanitorClosePIndex": 0,
        "TotJanitorKick": 2,
        "TotJanitorKickErr": 0,
        "TotJanitorKickOk": 2,
        "TotJanitorKickStart": 2,
        "TotJanitorNOOP": 0,
        "TotJanitorNOOPOk": 0,
        "TotJanitorRemovePIndex": 0,
        "TotJanitorSubscriptionEvent": 0,
        "TotJanitorUnknownErr": 0,
        "TotKick": 0,
        "TotPlannerKick": 2,
        "TotPlannerKickChanged": 1,
        "TotPlannerKickErr": 0,
        "TotPlannerKickOk": 2,
        "TotPlannerKickStart": 2,
        "TotPlannerNOOP": 0,
        "TotPlannerNOOPOk": 0,
        "TotPlannerSubscriptionEvent": 0,
        "TotPlannerUnknownErr": 0,
        "TotSaveNodeDef": 2,
        "TotSaveNodeDefGetErr": 0,
        "TotSaveNodeDefOk": 2,
        "TotSaveNodeDefSame": 0,
        "TotSaveNodeDefSetErr": 0
     },
     "pindexes": {
         "myFirstIndex_6cc599ab7a85bf3b_0": null
     }
}
GET /api/stats/index/{indexName}

Returns metrics, timings and counters for a single index from the node as JSON.

Permission Required: cluster.bucket[bucket_name].stats!read

Sample response
{
    "feeds": {
        "myFirstIndex_6cc599ab7a85bf3b": {}
    },
    "pindexes": {
        "myFirstIndex_6cc599ab7a85bf3b_0": null
    }
}

Index Querying

GET /api/index/{indexName}/count

Returns the count of indexed documents.

Permission Required : cluster.bucket[bucket_name].fts!read

Parameters
  • indexName: required, string, URL path parameter

    The name of the index whose count is to be retrieved.

POST /api/index/{indexName}/query

Queries an index.

Permission Required : cluster.bucket[bucket_name].fts!read

Parameters
  • indexName: required, string, URL path parameter

    The name of the index to be queried.

    The request's POST body depends on the index type. For index type bleve, here's a simple query POST body:
    {  
        "query": {
            "query": "a sample query",
            "boost": 1
        },
        "size": 10,
        "from": 0,
        "highlight": null,
        "fields": null,
        "facets": null,
        "explain": false
        }
    An example POST body using from/size for results paging, using ctl for a timeout and for "at_plus" consistency level. On consistency, the index must have incorporated at least mutation sequence-number 123 for partition (vbucket) 0 and mutation sequence-number 234 for partition (vbucket) 1 (where vbucket 1 should have a vbucketUUID of a0b1c2):
    {
        "ctl": {
            "timeout": 10000,
            "consistency": {
                "level": "at_plus",
                    "vectors": {
                        "customerIndex": {
                            "0": 123,
                            "1/a0b1c2": 234
                        }
                    }
                }
            },
            "query": {
                "query": "alice smith",
                "boost": 1
            },
            "size": 10,
            "from": 20,
            "highlight": {
                "style": null,
                "fields": null
            },
            "fields": [
                "*"
            ],
            "facets": null,
            "explain": true
    }

Response Object

The response object has a status section that must be checked for every request. Under nearly all circumstances, the query response will be HTTP 200 even though individual index shards (pindexes) may encounter a timeout or return an error.

Consistency and Timeouts

A query can specify a timeout value, a consistency requirement, or both. This section explains how this affects the query behavior and how to handle the resulting query return values.
  • logical first phase consistency wait - if timeout in this period, get 416 error with message saying request could not be satisfied).
  • If consistency wait times out with 416, return value to client will indicate the sequence number range processed so the client will have an idea how far the processing got and has the option of retrying more intelligently.
  • In phase 2, you have the normal pindex timeout. This will start whenever the first phase completes. At this point, request will return 200 HTTP response code unless there is an internal server error.
  • Client must check response status, which will return any errors or timeouts for each pindex. If The response includes the number of errors, and the client can determine whether they need the complete results or can continue as long as enough pindexes return to give a reasonable user experience. Note that the query return status will be 200 even if all pindexes return errors so it's critical to check the response status and code accordingly.
  • If client sets timeout very low, e.g. 1ms, you may receive a 200 error with all timeouts instead of a consistency wait timeout.