ALTER SEARCH INDEX CONFIG

Modify the search index pending configuration.

Use the CQL shell command DESCRIBE SEARCH INDEX to view the pending and active search index. Use the RELOAD SEARCH INDEX command to apply changes to the active configuration.

This command is available only on DSE Search nodes. Running search index management commands on large datasets can take longer than the CQL shell default timeout of 10 minutes. Increase the CQL shell client timeout as required.

Synopsis

ALTER SEARCH INDEX CONFIG ON [<keyspace_name>]<table_name>
  ( ADD <element_path> [ <attribute_list> ] WITH $$ <json_map> $$
  | SET <element_identifier> = '<value>'
  | SET <shortcut> = <value>
  | DROP <element_identifier>
  | DROP <shortcut> ) ;
Legend
Syntax conventions Description

UPPERCASE

Literal keyword.

Lowercase

Not literal.

< >

Variable value. Replace with a user-defined value.

[]

Optional. Square brackets ([]) surround optional command arguments. Do not type the square brackets.

( )

Group. Parentheses ( ( ) ) identify a group to choose from. Do not type the parentheses.

|

Or. A vertical bar (|) separates alternative elements. Type any one of the elements. Do not type the vertical bar.

...

Repeatable. An ellipsis ( ... ) indicates that you can repeat the syntax element as often as required.

'<Literal string>'

Single quotation (') marks must surround literal strings in CQL statements. Use single quotation marks to preserve upper case.

{ <key> : <value> }

Map collection. Braces ({ }) enclose map collections or key value pairs. A colon separates the key and the value.

<datatype2

Set, list, map, or tuple. Angle brackets ( < > ) enclose data types in a set, list, map, or tuple. Separate the data types with a comma.

<cql_statement>;

End CQL statement. A semicolon (;) terminates all CQL statements.

[--]

Separate the command line options from the command arguments with two hyphens ( -- ). This syntax is useful when arguments might be mistaken for command line options.

' <<schema\> ... </schema\>> '

Search CQL only: Single quotation marks (') surround an entire XML schema declaration.

@<xml_entity>='<xml_entity_type>'

Search CQL only: Identify the entity and literal value to overwrite the XML element in the schema and solrConfig files.

keyspace_name.table_name

Identifies the table of the search index; keyspace name is required when the table is not in the active keyspace.

element_path

Identifies the XML path to the setting. Separate child elements using a period. For example:

types.fieldTypes
attribute_list

A comma-separated list of attributes value pairs enclosed in braces using the following syntax:

[@<attribute_name> = '<value>',
@<attribute_name> = '<value>', ... ]
json_map

Advanced. Use JSON format to define child elements, such as analyzer tokenizer and filter definitions of field type.

{ "element_name" : [
                  { "child_element_name" : { "child_attribute_name" : "value" } } ,
                  { "child_element_name" : { "child_attribute_name" : "value" } }, ... ],
"element_name" : [
                  { "child_element_name" : { "child_attribute_name" : "value" } } ,
                  { "child_element_name" : { "child_attribute_name" : "value" } }, ... ], ... }
element_identifier

Identifies the XML path to the setting. To locate an element with specific attribute, use the following syntax.

<element_name>[@<attribute_name>='<value>']
shortcut

Shortcuts to configuration element values using SET:

  • autoCommitTime: Default value is 10000.

  • defaultQueryField: Name of the field. Default is not set. Use SET to add, and use DROP to remove.

  • directoryFactory: Can be used as an alternative to the directoryFactoryClass option. The options are standard or encrypted.

  • filterCacheLowWaterMark: Default is 1024.

  • filterCacheHighWaterMark: Default is 2048.

  • directoryFactoryClass: Specifies the fully-qualified name of the directory factory. Use in place of the directoryFactory option for directory factories other than the standard or encrypted directory factory.

  • ramBufferSize: Default is 512.

  • realtime: Default is false.

  • mergeMaxThreadCount: Must configure with mergeMaxMergeCount. The default is the number of tpc_cores as configured in cassandra.yaml.

  • mergeMaxMergeCount: Must configure with mergeMaxThreadCount. The default value is calculated as follows:

    max(max(<maxThreadCount * 2>, <<num_tokens> * 8>), <maxThreadCount + 5>)

    where num_tokens is the number of token ranges to assign to the virtual node (vnode) as configured in cassandra.yaml.

EBNF

EBNF syntax:

alterSearchIndex ::= 'ALTER' 'SEARCH' 'INDEX' 'CONFIG'
          'ON' tableName
          (
          ('ADD' elementPath 'WITH' json) |
          ('SET' elementPath('@' attribute)? '=' value) |
          ('DROP' elementPath('@' attribute)?) |
          )
          tableName        ::= (keyspace '.')? table
          elementPath      ::= elementName
          ('[' '@' attributeName '=' attributeValue
          (',' '@' attributeName '=' attributeValue)* ']')?
          ( '.' elementName ('[' '@' attributeName '=' attributeValue
          (',' '@' attributeName '=' attributeValue)* ']')?)*

Railroad diagram:

alterSearchIndex
Image shows the first part of a railroad diagram for the ALTER SEARCH INDEX search CQL command
Image shows the first part of a railroad diagram for the ALTER SEARCH INDEX search CQL command
tableName
Image shows a railroad diagram of tableName
elementPath
Image shows a railroad diagram of elementPath

Examples

The search index configuration is altered for the wiki.solr keyspace and table, and the specified options.

Enable encryption on search index

Enable encryption on search index:

  1. Change the index configuration schema:

    ALTER SEARCH INDEX CONFIG ON cycling.comments
      SET directoryFactory = 'encrypted';
  2. Review the pending schema change before applying it:

    DESC PENDING SEARCH INDEX CONFIG ON cycling.comments;
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <config>
      <luceneMatchVersion>LUCENE_6_0_1</luceneMatchVersion>
      <dseTypeMappingVersion>2</dseTypeMappingVersion>
      <directoryFactory class="solr.EncryptedFSDirectoryFactory" name="DirectoryFactory"/>
      <indexConfig>
        <rt>false</rt>
      </indexConfig>
      <jmx/>
      <updateHandler>
        <autoSoftCommit>
          <maxTime>10000</maxTime>
        </autoSoftCommit>
      </updateHandler>
      <query>
        <filterCache class="solr.SolrFilterCache" highWaterMarkMB="2048" lowWaterMarkMB="1024"/>
        <enableLazyFieldLoading>true</enableLazyFieldLoading>
        <useColdSearcher>true</useColdSearcher>
        <maxWarmingSearchers>16</maxWarmingSearchers>
      </query>
      <requestDispatcher>
        <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000"/>
        <httpCaching never304="true"/>
      </requestDispatcher>
      <requestHandler class="solr.SearchHandler" default="true" name="search"/>
      <requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query"/>
      <requestHandler class="solr.UpdateRequestHandler" name="/update"/>
      <requestHandler class="solr.UpdateRequestHandler" name="/update/csv" startup="lazy"/>
      <requestHandler class="solr.UpdateRequestHandler" name="/update/json" startup="lazy"/>
      <requestHandler class="solr.FieldAnalysisRequestHandler" name="/analysis/field" startup="lazy"/>
      <requestHandler class="solr.DocumentAnalysisRequestHandler" name="/analysis/document" startup="lazy"/>
      <requestHandler class="solr.admin.AdminHandlers" name="/admin/"/>
      <requestHandler class="solr.PingRequestHandler" name="/admin/ping">
        <lst name="invariants">
          <str name="qt">search</str>
          <str name="q">solrpingquery</str>
        </lst>
        <lst name="defaults">
          <str name="echoParams">all</str>
        </lst>
      </requestHandler>
      <requestHandler class="solr.DumpRequestHandler" name="/debug/dump">
        <lst name="defaults">
          <str name="echoParams">explicit</str>
          <str name="echoHandler">true</str>
        </lst>
      </requestHandler>
    </config>
  3. Apply the pending schema change and rebuild the index:

    RELOAD SEARCH INDEX ON cycling.comments;
  4. Use DESCRIBE SEARCH INDEX to review changes after rebuilding the index.

Request handler

  1. Add a configuration request handler to the search index:

    ALTER SEARCH INDEX CONFIG ON cycling.comments
      ADD requestHandler[@name='/elevate',@class='solr.SearchHandler', @startup='lazy']
      WITH $$ {"defaults":[{"echoParams":"explicit"}],"last-components":["elevator"]} $$;
  2. Apply the change and rebuild the search index:

    RELOAD SEARCH INDEX ON cycling.comments;
  3. Use DESCRIBE SEARCH INDEX to get the new configuration with the requestHandler element:

    <requestHandler name="/elevate" class="solr.SearchHandler">
       <lst name="defaults">
          <str name="echoParams">explicit</str>
       </lst>
       <arr name="last-components">
        <str>elevator</str>
       </arr>
    </requestHandler>

Extend TieredMergePolicy to support automatic removal of deletes

ALTER SEARCH INDEX CONFIG ON cycling.comments
  SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].bool[@name='mergeSingleSegments'] = true;

ALTER SEARCH INDEX CONFIG ON cycling.comments
  SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].int[@name='maxMergedSegmentMB'] = 1005;

ALTER SEARCH INDEX CONFIG ON cycling.comments
  SET indexConfig.mergePolicyFactory[@class='org.apache.solr.index.AutoExpungeDeletesTieredMergePolicyFactory'].int[@name='forceMergeDeletesPctAllowed'] = 25;

Reload the search index:

RELOAD SEARCH INDEX ON cycling.comments;

Change the automatic commit time

To change the automatic commit time for a search index alteration, use SET autoCommitTime:

ALTER SEARCH INDEX CONFIG ON cycling.comments
  SET autoCommitTime = 50000;

Was this helpful?

Give Feedback

How can we improve the documentation?

© Copyright IBM Corporation 2026 | Privacy policy | Terms of use Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: Contact IBM