ICU 分词器
支持多种语言。可以使用此分词器识别非英语语言中的单词边界,包括未用空格分隔的亚洲语言。
ICU 分词器未预先配置。可以通过首先创建用户定义的转换函数 (UDTF) 来配置分词器。然后设置参数 locale 来标识分词器的语言。
重要
如果创建了不包含表的数据库并且提高了 k-safety,则必须在使用 Vertica 分词器之前先使用 REBALANCE_CLUSTER 重新平衡数据。参数
示例
以下示例步骤显示了如何将 ICU 分词器配置为简体中文,然后从包含中文字符的表 foo 中创建文本索引。
有关如何配置分词器的详细信息,请参阅配置分词器。
-
使用 UDTF 创建分词器。将示例分词器命名为 ICUChineseTokenizer。
VMart=> CREATE OR REPLACE TRANSFORM FUNCTION v_txtindex.ICUChineseTokenizer AS LANGUAGE 'C++' NAME 'ICUTokenizerFactory' LIBRARY v_txtindex.logSearchLib NOT FENCED; CREATE TRANSFORM FUNCTION
-
获取分词器的过程 ID。
VMart=> SELECT proc_oid from vs_procedures where procedure_name = 'ICUChineseTokenizer';
proc_oid ------------------- 45035996280452894 (1 row)
-
将参数 locale 设置为简体中文。使用过程 ID 标识分词器。
VMart=> SELECT v_txtindex.SET_TOKENIZER_PARAMETER('locale','zh_CN' using parameters proc_oid='45035996280452894'); SET_TOKENIZER_PARAMETER ------------------------- t (1 row)
-
锁定分词器。
VMart=> SELECT v_txtindex.SET_TOKENIZER_PARAMETER('used','true' using parameters proc_oid='45035996273762696'); SET_TOKENIZER_PARAMETER ------------------------- t (1 row)
-
创建示例表 foo,其中包含要编制索引的简体中文文本。
VMart=> CREATE TABLE foo(doc_id integer primary key not null,text varchar(250)); CREATE TABLE
VMart=> INSERT INTO foo values(1, u&'\4E2D\534E\4EBA\6C11\5171\548C\56FD'); OUTPUT -------- 1
-
对表 foo 创建索引 index_example。该示例在没有词干分析器的情况下创建索引;Vertica 词干分析器仅适用于英语文本。对非英语文本使用英语词干分析器可能会导致分词不正确。
VMart=> CREATE TEXT INDEX index_example ON foo (doc_id, text) TOKENIZER v_txtindex.ICUChineseTokenizer(long varchar) stemmer none; CREATE INDEX
-
查看新索引。
VMart=> SELECT * FROM index_example ORDER BY token,doc_id; token | doc_id --------+-------- 中华 | 1 人民 | 1 共和国 | 1 (3 rows)