全部產品
Search
文件中心

OpenSearch:索引結構

更新時間:Jun 12, 2026

索引表結構介紹

每個Document都是由多個field組成,每個field中包含一系列的詞語,構建索引的目的是為了加快檢索的速度,根據映射關係方向的不同,索引可以分為:

  • 欄位(field):用於定義索引表的欄位名及欄位類型。

  • 倒排索引(index):倒排索引儲存了從單詞到DocID的映射關係,形如:詞:(Doc1,Doc2,...,DocN),倒排索引主要用在檢索中,它能快速的定位使用者查詢到關鍵字對應的Document。

  • 正排索引(attribute):正排索引儲存從DocID到field的映射關係,形如:DocID-->(term1,term2,...termn),正排索引分單值和多值兩種,單值attribute由於長度是固定的(不包括string類型),因此尋找效率高,而且可以支援更新。多值attribute表示某個field中有多個資料(數量不固定),由於長度不確定,因此尋找效率相較於單值更慢,而且不能支援更新。

    正排索引主要是在查詢到了某個Document後,根據docid值能快速擷取到其attribute用來統計、排序、過濾中。目前引擎支援的正排欄位基本類型包括:

    INT8(8位有符號數字類型), UINT8(8位無符號數字類型),

    INT16(16位有符號數字類型),

    UINT16(16位無符號數字類型),

    INTEGER(32位有符號數字類型),

    UINT32(32位無符號數字類型), INT64(64位有符號數字類型),

    UINT64(64位無符號數字類型),

    FLOAT(32位浮點數),

    DOUBLE(64位浮點數),

    STRING(字串類型)

  • 摘要(summary):summary的儲存形式與attribute類似,但是summary是將一個Document對應的多個field儲存在一起,並且建立映射,所以能很快從docid定位到對應的summary內容。summary主要是用於結果的展示,一般而言summary的內容都比較大,對於每次查詢而言不適合取過多的summary,只有最終需要展示結果的Document會取到對應的summary。由於summary過大,引擎在儲存summary時提供壓縮的機制,在schema中配置summary壓縮,那麼引擎在儲存時會用zlib壓縮後再儲存,讀取時引擎會先解壓,再返回給使用者。

說明

有關索引表配置的詳細介紹的文章可參考索引表配置

索引schema樣本

{
  "file_compress": [
    {
      "name": "file_compressor",
      "type": "zstd"
    },
    {
      "name": "no_compressor",
      "type": ""
    }
  ],
  "table_name": "test",
  "summarys": {
    "summary_fields": [
      "id",
      "fb_boolean",
      "fb_datetime",
      "fb_string",
      "fb_decimal",
      "fb_bigint",
      "fb_text"
    ],
    "parameter": {
      "file_compressor": "zstd"
    }
  },
  "indexs": [
    {
      "index_name": "id",
      "index_type": "PRIMARYKEY64",
      "index_fields": "id",
      "has_primary_key_attribute": true,
      "is_primary_key_sorted": false
    },
    {
      "index_name": "fb_boolean",
      "index_type": "STRING",
      "index_fields": "fb_boolean",
      "file_compress": "file_compressor",
      "format_version_id": 1
    },
    {
      "index_name": "fb_datetime",
      "index_type": "STRING",
      "index_fields": "fb_datetime",
      "file_compress": "file_compressor",
      "format_version_id": 1
    },
    {
      "index_name": "fb_string",
      "index_type": "STRING",
      "index_fields": "fb_string"
    },
    {
      "index_name": "fb_text",
      "index_type": "TEXT",
      "index_fields": "fb_text"
    }
  ],
  "attributes": [
    {
      "field_name": "id",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_boolean",
      "file_compress": "file_compressor"
    },
    {
      "field_name": "fb_datetime",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_string",
      "file_compress": "file_compressor"
    },
    {
      "field_name": "fb_decimal",
      "file_compress": "no_compressor"
    },
    {
      "field_name": "fb_bigint",
      "file_compress": "no_compressor"
    }
  ],
  "fields": [
    {
      "user_defined_param": {},
      "field_name": "id",
      "field_type": "INT64",
      "compress_type": "equal"
    },
    {
      "field_name": "fb_boolean",
      "field_type": "STRING",
      "compress_type": "uniq"
    },
    {
      "field_name": "fb_datetime",
      "field_type": "STRING",
      "compress_type": "uniq"
    },
    {
      "user_defined_param": {
        "multi_value_sep": ","
      },
      "field_name": "fb_string",
      "field_type": "STRING",
      "compress_type": "equal",
      "multi_value": true
    },
    {
      "field_name": "fb_decimal",
      "field_type": "DOUBLE"
    },
    {
      "field_name": "fb_bigint",
      "field_type": "INT64",
      "compress_type": "equal"
    },
    {
      "field_name": "fb_text",
      "field_type": "TEXT",
      "analyzer": "chn_standard"
    }
  ]
}

添加索引表

  1. 在執行個體管理介面,進入配置中心>索引結構頁面,點擊添加索引表

  1. 設定索引表,選擇資料來源,設定資料分區

索引表地區設定索引表名稱,在資料來源地區選取項目已配置的資料來源,在資料分區地區設定分區數量。在選擇模版地區,可選擇通用模板向量:圖片搜尋向量:文本語義搜尋模板。

  1. 欄位設定。在欄位配置地區,可設定各欄位的欄位名稱、欄位類型、是否為多重值欄位、是否作為屬性欄位,以及索引類型和分析器等配置項。

多重值欄位分隔設定

預設為ha3分隔字元^] ,使用者也可根據業務需求自訂分隔字元。

屬性和欄位內容壓縮

  • 屬性欄位可以選擇是否壓縮,預設為不壓縮,選擇file_compressor表示開啟壓縮

  • 欄位內容可以選擇是否壓縮,預設為不壓縮,預設多值和STRING類型選擇uniq,單值數實值型別是equal

說明

如果開啟了屬性壓縮,建議前往「部署管理-資料節點-線上表配置」編輯索引載入方式,以此降低對效能的影響

索引設定以表格形式展示,列包括索引名稱索引類型(如 PRIMARYKEY64、STRING、TEXT)、包含欄位資料壓縮(壓縮/不壓縮)、進階配置查看/修改)和操作刪除),底部通過 + 按鈕可添加新索引。

索引欄位設定壓縮

  • 索引欄位可以選擇是否壓縮,預設為不壓縮,選擇file_compressor表示開啟壓縮

說明
  • 主鍵索引不支援壓縮

  • 如果開啟了索引壓縮,建議前往「部署管理-資料節點-線上表配置」編輯索引載入方式,以此降低對效能的影響

  1. 配置完成後,點擊儲存版本,並在彈框後填寫備忘(可選),點擊發布

本樣本中,索引表名稱設定為vector_index,編輯方式選擇管理員模式,欄位設定中添加兩個欄位:id(INT64類型,設為主鍵,勾選屬性欄位和搜尋結果展示)和embedding(STRING類型,勾選搜尋結果展示)。

  1. 索引表添加成功後,可在營運中心>部署管理中查看新加的索引表的拓撲。

拓撲圖展示了從上到下的架構層次:查詢接入串連至叢集(每個叢集包含資料節點查詢節點),叢集串連至索引表,索引表串連至資料來源,各層之間用箭頭標識資料流向。

  1. 若需要新加的索引表在叢集中生效,需要在營運中心>營運管理中手動觸發配置更新並全量,“配置更新”操作中執行“推送配置並觸發索引重建”。

配置類型中選擇離線配置,在索引結構版本地區選中目標資料來源並勾選對應的索引表、選擇索引表版本,按需選擇詞典配置版本離線配置版本離線外掛程式版本,然後單擊確定

選擇資料來源配置版本,勾選目的地組群,選中推送配置並觸發索引重建後,單擊確定

  1. 索引重建時,可以在營運中心>變更歷史中的資料來源變更中查看全量進度:

全量任務(手動觸發全量)的流水線包含 init、trigger、scan、build、switch 五個階段,各階段通過狀態表徵圖展示當前執行進度。

索引重建完成後,即可對新索引表進行查詢。

重要
  • 欄位設定有且僅有一個主鍵;

  • 欄位設定中,至少需要有一個欄位勾選搜尋結果展示;

  • TEXT類型的欄位需要設定分析方式,且不支援多值;

  • 索引設定有且僅有一個主鍵索引;

  • 多值分割符除預設分割符外,只支援單字元,且不支援全形字元;

  • 在設定資料分區時需要注意,假設叢集的副本個數為2,資料分區設定為2,那麼在購買執行個體時資料節點數量需要大於副本個數*資料分區,新加的索引表才能正常使用。

  • 分區數設定時參考下面幾個規則:單個分區資料量不要超過6億(最大21億);單個分區的索引大小不要超過300G;如果有即時更新需求,單個分區資料更新tps不要超過4000(add命令的文檔,如果只是update可以達到1w tps)。

編輯索引表

索引表版本介紹

新建立的索引表預設有2個版本:

  • index_config_v1:初次配置的索引表版本,若已推送配置並索引重建,狀態變為“使用中”,若未推送配置並索引重建,狀態則為“未使用”;

  • index_config_edit:正在編輯中的索引表版本,狀態一直為“編輯中”;

隨著索引表版本的連續發布版本名稱會依次遞增,比如第二個版本名為“index_config_v2”,第三個版本名為“index_config_v3”依次類推,為明顯區分各個版本,每個版本的備忘是必須填寫的。

編輯並發布新的索引表版本

  1. 找到版本狀態為“編輯中”的版本,點擊編輯。

展開 index_config_edit 版本行,在檔案名稱列表中找到 test_main_schema.json,單擊其對應的編輯

說明

cluster.json配置補充說明

平台支援配置索引整理策略,可以對customized_merge_configsegment_customize_metrics_updater(僅新執行個體支援)進行配置:

在左側導覽列選擇配置中心 > 索引結構,開啟 main_cluster.json 檔案,在索引值表格中找到 customized_merge_config 配置項,單擊對應操作列的編輯

參數詳解參考:離線cluster配置

  1. 修改後,點擊儲存版本。

管理員模式的索引結構編輯頁面(main_index_schema.json)中,欄位設定地區可配置欄位名稱、欄位類型、主鍵、多值、分析方式、屬性欄位及搜尋結果展示等屬性,索引設定地區可管理索引名稱、索引類型及包含欄位。

也可以切換到開發人員模式手動編輯schema:

在開發人員模式的 JSON 編輯器中,summarys 部分將 compress 設為 falsesummary_fields 包含 idagenameaddressinfo 五個欄位;indexs 數組定義了三個索引:name(類型 STRING)、address(類型 STRING)、info(類型 TEXT)。編輯完成後單擊 儲存版本

  1. 找到版本狀態為“編輯中”的版本,點擊發布,並填寫備忘,點擊確定

此時系統會為該索引表產生一個新的索引表版本,版本狀態為“未使用”。

  1. 若需要將新添加的索引表版本在叢集中生效,則需要在營運中心>營運管理>更新配置中執行推送配置並觸發索引重建

在更新配置頁面,配置類型選擇離線配置,在索引結構版本中勾選目標索引表並選擇要推送的版本(如index_config_v4),是否觸發索引重建選擇推送配置並觸發索引重建,單擊確定

刪除索引表版本

狀態為“未使用”的索引表版本可以直接刪除:

單擊目標版本操作列的刪除,在彈出的確認對話方塊中確認刪除(提示刪除後不可恢複),單擊確定完成操作。

查看索引表版本

點擊“查看”後,可跳轉到索引表版本的唯讀配置介面:

在管理員模式下,欄位設定地區以表格形式展示索引表的欄位配置,表格列包括欄位名稱欄位類型主鍵多值屬性欄位搜尋結果展示資料壓縮分析方式進階配置,可直觀查看各欄位的定義。

  • 開發人員模式。

開發人員模式下,索引表版本以 JSON 格式展示在帶行號的編輯器中。JSON 結構包含 indexs(索引定義,如主鍵索引 PRIMARYKEY64,含 index_fieldsis_primary_key_sorted 等參數)、attributes(屬性列表)和 fields(欄位定義,每個欄位指定 field_namefield_type,如 INT64STRING)。

刪除索引表

若索引表中的索引表版本沒有“使用中”的狀態,可以直接刪除索引表:

在索引結構的索引表詳情頁面頂部,單擊索引表名稱右側的刪除連結即可刪除該索引表。

若索引表中的索引表版本有“使用中”的狀態:

則需要按如下步驟操作,才可刪除:

  1. 在營運管理>部署管理中,點擊索引表,'取消訂閱'。

    選中目標索引表後,在彈出面板中選擇線上生效頁簽,在訂閱狀態行的操作列中單擊取消訂閱

  2. 然後在配置中心--->索引結構中,單擊目標索引表名稱右側的刪除連結,刪除對應的索引表。

警告

如果在部署管理中,索引表取消訂閱,一定要在索引結構中刪除對應的索引表,否則會影響線上叢集。

注意事項

  • 添加索引表時,資料來源為必選項,若無資料來源,則需要先添加資料來源再添加索引表;

  • 索引表名稱建立後不可修改;

  • 索引表中如有“使用中”的索引表版本,則無法直接刪除索引表;

  • 每個索引表只能存在一個編輯中的索引表版本;