
# BM25索引
实现了相似文本BM25索引访问方法，比如创建、维护、检索等。创建索引格式请参见《参考》中"SQL参考 \> SQL语法 \> C \> CREATE INDEX"章节。BM25索引不支持UNIQUE、CONCURRENTLY。
- 重建索引请参见《参考》中"SQL参考 \> SQL语法 \> R \> REINDEX"章节。
- 删除索引请参见《参考》中"SQL参考 \> SQL语法 \> D \> DROP INDEX"章节。
- **GLOBAL**
  分区表GLOBAL索引不支持。
  
- **ASC**
  不支持。
  
- **CONCURRENTLY**
  不支持。
  
- **UNIQUE**
  不支持。
  
- **COLLATE collation**
  不支持。
  
- **DEDUPLICATION**
  不支持复合索引。
  
- **USING method**
  指定创建索引的方法。
  新增可选索引类型BM25：BM25索引，针对文本和文本数组数据的词倒排相似文本检索索引。
  
- **WITH ( {storage_parameter = value} \[, ... \] )**
  指定索引方法的存储参数。
  1. storage_parameter：数据存储格式，取值范围{"USTORE", "ASTORE"}，需要和原数据表保持一致。
  
  2. num_parallels：建索引并行度，取值范围1-64的整数，默认值为1。
  
  3. tokenize_dict：文本数据分词使用词典名，默认值pg_catalog.simple_cn_segmentation为系统默认内置中英文分词词典。具体词典使用和创建方法请参考[自定义Tokenweight分词词典](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/gaussdb-80-0017.html)。
  
  4. token_hash_bucket_capacity：自定义存储token哈希表的大小，取值范围1000\~100000000的整数，默认为10000000。
   
表1BM25索引新增系统内部函数 
| 函数名                  | 描述                                     |
|:---|:---|
| gs_bm25build         | 创建基于倒排词的BM25索引。                        |
| gs_bm25buildempty    | 反馈空索引。                                 |
| gs_bm25options       | 为索引解析并验证reloptions数组。                  |
| gs_bm25insert        | 将新的元组插入到现有索引中，维护BM25索引。                |
| gs_bm25beginscan     | 打开索引内部倒排词表容器，准备后续查询。                   |
| gs_bm25gettuple      | 此函数提供执行器获得一条索引数据，在其中实现BM25评分排序检索的核心步骤。 |
| gs_bm25rescan        | 重置索引扫描结构体上的变量。                         |
| gs_bm25endscan       | 清空索引扫描结构体上的变量并释放。                      |
| gs_bm25bulkdelete    | 将所有索引中的死元组进行重置并且放入FSM中。                |
| gs_bm25vacuumcleanup | 更新BM25索引统计信息。                          |
| gs_bm25costestimate  | 针对BM25扫描过程进行代价评估。                      |
   
表2BM25索引相关新增系统函数 
| 函数名                                          | 描述                              |
|:---|:---|
| gs_bm25_tokenize(text, cstring)              | 使用指定词典对输入文本进行分词操作，返回被分割的单词文本数组。 |
| gs_bm25_inspect(text)                        | 显示索引磁盘使用和内部词倒排信息等数据。            |
| gs_bm25_distance_text(text, text)            | 返回bm25文档相似分数，只在使用BM25索引检索时有效。   |
| gs_bm25_distance_textarr(text\[\], text\[\]) | 返回bm25文档相似分数，只在使用BM25索引检索时有效。   |
   
表3BM25索引相关新增GUC参数 
| 参数名                 | 级别           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|
| bm25_ranking_metric | 会话级（session） | 参数数值对应检索时相似文档的评分算法： 0：BM25_OKAPI (默认值), 1：BM25_ATIRE, 2：BM25_L, 3：BM25_PLUS, 4：TF_IDF。 取值范围: \[0,127\]，默认值0。设置为定义范围外的参数数值时使用默认BM25_OKAPI算法。 |
| bm25_ncandidates    | 会话级（session） | 预估索引召回文档数量，推荐使用默认值，过大或者过小的数值会使相似文档排序的索引检索时间变慢。 在查询语句混合where条件使用时，该值失效，数据库会自动估计合适的索引召回文档数量。 取值范围: \[0,65535\]，默认值128。                                                                                                                                                                                                          |
   
