A newer version of this documentation is available.

View Latest

Indexes

      +

      Index Definition

      GET /api/index

      Returns all index definitions as JSON.

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

      Role Required: FTS-Admin

      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": "fulltext-index",
                   "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

      Role Required: FTS-Admin

      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": "",
                "source
                    ": "nil",
                "sourceUUID": "",
                "type": "fulltext-index",
                "uuid": "6cc599ab7a85bf3b"
              },
              "planPIndexes": [
                {
                 "indexName": "myFirstIndex",
                 "indexParams": "",
                 "indexType": "bleve",
                 "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

      Role Required: FTS-Admin

      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 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": "mossStore"
               }
               }
      • 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

        • 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

      Role Required: FTS-Admin

      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

      Role Required: FTS-Admin

      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

      Role Required: FTS-Admin

      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

      Role Required: FTS-Admin

      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 And Debugging

      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

      Role Required: FTS-Admin

      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

      Role Required: FTS-Admin

      Sample response
      {
          "feeds": {
              "myFirstIndex_6cc599ab7a85bf3b": {}
          },
          "pindexes": {
              "myFirstIndex_6cc599ab7a85bf3b_0": null
          }
      }
      POST /api/index/{indexName}/analyzeDoc

      Sends a json document to the given index for text analysis.

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

      Role Required: FTS-Searcher, FTS-Admin

      Parameters

      • indexName: required, string, URL path parameter

        The name of the index against which the analysis needs to performed.

        The request’s POST body contains any sample json document. For example:

        {
           "name": "hello world",
           "title": "couchbase blr"}
        }

      Response Object

      A sample response for an index definition with keyword analyzer set against the title field and an ngram (min=2, max=5) tokenfilter set against the name field would be like below for the above request.

      {
        "status": "ok",
        "analyzed": [
          {
            "couchbase blr": {
              "Term": "Y291Y2hiYXNlIGJscg==",
              "Locations": [
                {
                  "Field": "title",
                  "ArrayPositions": [],
                  "Start": 0,
                  "End": 13,
                  "Position": 1
                }
              ]
            }
          },
          {
            "he": {
              "Term": "aGU=",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 0,
                  "End": 5,
                  "Position": 1
                }
              ]
            },
            "hel": {
              "Term": "aGVs",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 0,
                  "End": 5,
                  "Position": 1
                }
              ]
            },
            "hell": {
              "Term": "aGVsbA==",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 0,
                  "End": 5,
                  "Position": 1
                }
              ]
            },
            "hello": {
              "Term": "aGVsbG8=",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 0,
                  "End": 5,
                  "Position": 1
                }
              ]
            },
            "wo": {
              "Term": "d28=",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 6,
                  "End": 11,
                  "Position": 2
                }
              ]
            },
            "wor": {
              "Term": "d29y",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 6,
                  "End": 11,
                  "Position": 2
                }
              ]
            },
            "worl": {
              "Term": "d29ybA==",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 6,
                  "End": 11,
                  "Position": 2
                }
              ]
            },
            "world": {
              "Term": "d29ybGQ=",
              "Locations": [
                {
                  "Field": "name",
                  "ArrayPositions": [],
                  "Start": 6,
                  "End": 11,
                  "Position": 2
                }
              ]
            }
          },
          null
        ]
      }

      Index Querying

      GET /api/index/{indexName}/count

      Returns the count of indexed documents.

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

      Role Required: FTS-Searcher, FTS-Admin

      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

      Role Required: FTS-Searcher, FTS-Admin

      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.