> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# text_index_* session settings

> ClickHouse session settings in the text_index_* generated group.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Default value", "Comment"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        Version history
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Default</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Changeable without restart
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

These settings are available in [system.settings](/reference/system-tables/settings) and are autogenerated from [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="text_index_hint_max_selectivity">
  text\_index\_hint\_max\_selectivity
</h2>

<SettingsInfoBlock type="Float" default_value="0.2" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.12"},{"label": "0.2"},{"label": "New setting"}]}]} />

Maximal selectivity of the filter to use the hint built from the inverted text index.

<h2 id="text_index_like_max_postings_to_read">
  text\_index\_like\_max\_postings\_to\_read
</h2>

<SettingsInfoBlock type="UInt64" default_value="50" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "50"},{"label": "New setting"}]}]} />

Maximum number of large postings to read when text index LIKE evaluation by the dictionary scan is enabled.

Requires `use_text_index_like_evaluation_by_dictionary_scan` to be enabled.

<h2 id="text_index_like_min_pattern_length">
  text\_index\_like\_min\_pattern\_length
</h2>

<SettingsInfoBlock type="UInt64" default_value="4" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.4"},{"label": "4"},{"label": "New setting"}]}]} />

Minimum length of the alphanumeric needle in a LIKE/ILIKE pattern, or of a `startsWith`/`endsWith` needle,
required to use the text index LIKE evaluation by the dictionary scan.
Patterns shorter than this threshold match too many dictionary tokens and are skipped to avoid expensive scans.

With the `array` tokenizer, where any pattern qualifies, the threshold is compared against the number of non-wildcard characters in the whole pattern.

Requires `use_text_index_like_evaluation_by_dictionary_scan` to be enabled.

<h2 id="text_index_posting_list_apply_mode">
  text\_index\_posting\_list\_apply\_mode
</h2>

<SettingsInfoBlock type="TextIndexPostingListApplyMode" default_value="lazy" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "lazy"},{"label": "Text index queries now decode posting lists on demand with a cursor instead of materializing them into Roaring Bitmaps, which reduces memory usage and CPU time for selective queries."}]}, {"id": "row-2","items": [{"label": "26.6"},{"label": "materialize"},{"label": "New setting for lazy posting list apply mode"}]}]} />

Controls how posting lists are applied during text index queries.
'materialize' eagerly decodes posting lists into Roaring Bitmaps.
'lazy' (default) uses cursor-based on-demand decoding (requires an index format with a serialized codec).
'lazy' is applied only where it is supported: queries with patterns (such as `LIKE`) and parts with an index written by an older version fall back to 'materialize'.

<h2 id="text_index_postings_intersection_algorithm">
  text\_index\_postings\_intersection\_algorithm
</h2>

<SettingsInfoBlock type="TextIndexPostingsIntersectionAlgorithm" default_value="auto" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.10"},{"label": "auto"},{"label": "New setting superseding `text_index_lazy_intersection_density_threshold`: selects the posting list intersection algorithm in lazy posting list apply mode. `auto` keeps the previous default behavior, so `compatibility` must not change it."}]}]} />

Selects the algorithm that intersects posting lists in lazy posting list apply mode (`text_index_posting_list_apply_mode = 'lazy'`).

* `auto` (default): leapfrog is used only when the sparsest posting list can skip whole packed blocks of the densest one, and brute-force bitmap intersection otherwise.
* `bruteforce`: always use the brute-force bitmap intersection.
* `leapfrog`: always use the leapfrog intersection.

Intersections of 256 or more tokens always use leapfrog.
