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