对 Flex 表创建文本索引

在以下示例中,您将对 Flex 表创建文本索引。本例假定您已创建一个名为 mountains 的 Flex 表。要创建本示例中使用的 Flex 表,请参阅入门中的“使用 Flex 表”。

若要对 Flex 表创建文本索引,首先需要向 Flex 表添加主键约束。

=> ALTER TABLE mountains ADD PRIMARY KEY (__identity__);

对希望执行文本搜索的表创建文本索引。使用 FlexTokenizer 对 __raw__column 进行分词,并将数据类型指定为 LONG VARBINARY。由于 __raw__column 的数据类型不同于默认的 StringTokenizer,因此务必要使用 FlexTokenizer 来对 Flex 表创建文本索引。

=> CREATE TEXT INDEX flex_text_index ON mountains(__identity__, __raw__) TOKENIZER public.FlexTokenizer(long varbinary);

文本索引包含两列:

  • doc_id 使用源表中的唯一标识符。

  • token 使用来自源表的指定列的文本字符串填充。字词列通过对文本列中的单词进行分词和词干提取获得。

如果您的表已分区,您的文本索引还将包含名为 partition 的第三个列。

=> SELECT * FROM flex_text_index;
    token    | doc_id
-------------+--------
 50.6        |      5
 Mt          |      5
 Washington  |      5
 mountain    |      5
 12.2        |      3
 15.4        |      2
 17000       |      3
 29029       |      2
 Denali      |      3
 Helen       |      2
 Mt          |      2
 St          |      2
 mountain    |      3
 volcano     |      2
 29029       |      1
 34.1        |      1
 Everest     |      1
 mountain    |      1
 14000       |      4
 Kilimanjaro |      4
 mountain    |      4
(21 rows)

您一次只能在源表上创建一个文本索引。在未来,您将不必在每次更新或更改源表时重新创建文本索引。

通过在源表上运行的任何操作,您的文本索引将与源表的内容保持同步。这些操作包括但不限于:

  • COPY

  • INSERT

  • UPDATE

  • DELETE

  • DROP PARTITION

  • MOVE_PARTITIONS_TO_TABLE

    当您在编制了索引的源表中移动或交换分区时,验证目标表是否已存在并且以相同的方式编制了索引。