Configure an Autocomplete Search Index

  • Capella Operational
  • how-to
    +
    Create a Search index with the Capella UI or import a JSON Search index payload to start using autocomplete with the Search Service.

    Prerequisites

    • You have the Search Service enabled on a node in your operational cluster. For more information about how to change Services on your operational cluster, see Modify a Paid Cluster.

    • You have a bucket with scopes and collections in your operational cluster. For more information, see Manage Buckets.

    • You have logged in to the Couchbase Capella UI.

    Procedure

    You can create a compatible Search index with the Capella UI in Advanced Mode or import a JSON payload.

    Create an Autocomplete Search Index Manually with the Capella UI

    To create the Search index in the Capella UI with Advanced Mode:

    1. On the Operational Clusters page, select the operational cluster where you want to create a Search index.

    2. Go to Data Tools  Search.

    3. Click Create Search Index.

    4. Click Enable Advanced Options.

    5. In the Index Name field, enter a name for the Search index.

      Your index name must start with an alphabetic character (a-z or A-Z). It can only contain alphanumeric characters (a-z, A-Z, or 0-9), hyphens (-), or underscores (_).

      For Couchbase Server version 7.6 and later, your index name must be unique inside your selected bucket and scope. You cannot have 2 indexes with the same name inside the same bucket and scope.

    6. In the Bucket, Scope, and Collection lists, choose the bucket and scope where you want to create your Search index, and the collections you want to include.

    7. Create a Custom Analyzer with the following settings:

      1. In the Name field, enter keyword_to_lower.

      2. In the Tokenizer list, select single.

      3. In the Token Filters list, select and add the to_lower token filter.

    8. Create another custom analyzer with the following settings:

      1. In the Name field, enter edge_ngram.

      2. In the Tokenizer list, select unicode.

      3. Create a custom token filter with the following settings:

        1. In the Name field, enter edge_ngram_2_8.

        2. In the Type list, select edge_ngram.

        3. In the Min box, enter 2, or the minimum number of characters you want the Search index to use for autocomplete.

        4. In the Max box, enter 8, or the maximum number of characters you want the Search index to use for autocomplete.

      4. In the Token Filters list for your custom analyzer, click both the to_lower and your custom edge_ngram_2_8 token filter.

    9. Set your default analyzer to your custom keyword_to_lower analyzer.

    10. Under Type Mappings, in your document schema, click the name of a field that contains the data you want to search.

    11. Configure the field:

      1. In the Analyzer/Language list, select your edge_ngram analyzer.

      2. Select Include in search results.

      3. Select Support field agnostic search.

    12. Click Create Index.

    Import a Search Index Payload

    1. Import a Search Index Definition with the Capella UI with the following JSON payload, replacing all placeholder values that start with a $:

      {
          "type": "fulltext-index",
          "name": "$INDEX_NAME",
          "sourceType": "gocbcore",
          "sourceName": "$BUCKET_NAME",
          "planParams": {
            "maxPartitionsPerPIndex": 1024,
            "indexPartitions": 1
          },
          "params": {
            "doc_config": {
              "docid_prefix_delim": "",
              "docid_regexp": "",
              "mode": "scope.collection.type_field",
              "type_field": "type"
            },
            "mapping": {
              "analysis": {
                "analyzers": {
                  "edge_ngram": {
                    "token_filters": [
                      "to_lower",
                      "edge_ngram_2_8"
                    ],
                    "tokenizer": "unicode",
                    "type": "custom"
                  },
                  "keyword_to_lower": {
                    "token_filters": [
                      "to_lower"
                    ],
                    "tokenizer": "single",
                    "type": "custom"
                  }
                },
                "token_filters": {
                  "edge_ngram_2_8": {
                    "back": false,
                    "max": 8,
                    "min": 2,
                    "type": "edge_ngram"
                  }
                }
              },
              "default_analyzer": "keyword_to_lower",
              "default_datetime_parser": "dateTimeOptional",
              "default_field": "_all",
              "default_mapping": {
                "dynamic": true,
                "enabled": false
              },
              "default_type": "_default",
              "docvalues_dynamic": false,
              "index_dynamic": true,
              "store_dynamic": false,
              "type_field": "_type",
              "types": {
                "$SCOPE_NAME.$COLLECTION_NAME": {
                  "dynamic": false,
                  "enabled": true,
                  "properties": {
                    "$FIELD_NAME": {
                      "dynamic": false,
                      "enabled": true,
                      "fields": [
                        {
                          "analyzer": "edge_ngram",
                          "include_in_all": true,
                          "index": true,
                          "name": "$FIELD_NAME",
                          "store": true,
                          "type": "text"
                        }
                      ]
                    }
                  }
                }
              }
            },
            "store": {
              "indexType": "scorch",
              "segmentVersion": 15
            }
          },
          "sourceParams": {}
        }

    Next Steps

    To add an autocomplete feature to your application, see Add Autocomplete to Your Application for example code.