> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/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 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](/docs/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_lazy_intersection_density_threshold">
  text\_index\_lazy\_intersection\_density\_threshold
</h2>

**Aliases**: `text_index_density_threshold`

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

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.7"},{"label": "0.2"},{"label": "Renamed from `text_index_density_threshold` (kept as an alias); selects the posting list intersection algorithm in lazy posting list apply mode."}]}]} />

Posting list density threshold that selects the intersection algorithm in lazy posting list apply mode (`text_index_posting_list_apply_mode = 'lazy'`).
Below the threshold: leapfrog intersection (favors sparse posting lists). At or above: brute-force bitmap intersection (favors dense posting lists).

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

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="materialize" />

<VersionHistory rows={[{"id": "row-1","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' (default) eagerly decodes posting lists into Roaring Bitmaps.
'lazy' uses cursor-based on-demand decoding (requires an index format with a serialized codec).
