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 cluster. For more information about how to change Services on your cluster, see Modify a Paid Cluster.

    • You have a bucket with scopes and collections in your 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 cluster where you want to create the Search index.

    2. Go to Data Tools  Search.

    3. Click Create Search Index.

    4. Click the Advanced Mode toggle.

    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. Under Advanced Settings, expand Analyzers.

    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. Under Advanced Settings, expand Custom Filters.

    9. 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.

    10. Create another custom analyzer with the following settings:

      1. In the Name field, enter edge_ngram.

      2. In the Tokenizer list, select unicode.

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

    11. Under Type Mappings, in the Bucket list, select the bucket where you want to create your Search index.

    12. In the Scope list, select the scope where you want to create the index.

    13. In the Filter by collection or field field, enter the name of the collection you want to search from your Search index.

      1. When the collection appears, click the collection name.

      2. Clear Index everything from collection: "$COLLECTION_NAME".

      3. Click Add.

    14. In the Filter by collection or field field, enter the name of a field in your collection’s document schema that contains the data you want to search.

    15. Configure the field:

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

      2. Select Index this field.

      3. Select Store field values.

      4. Select Include in _all field.

    16. Expand General Settings.

    17. In the Default Analyzer list, select your keyword_to_lower analyzer.

    18. 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.