ICU 分词器

支持多种语言。可以使用此分词器识别非英语语言中的单词边界,包括未用空格分隔的亚洲语言。

ICU 分词器未预先配置。可以通过首先创建用户定义的转换函数 (UDTF) 来配置分词器。然后设置参数 locale 来标识分词器的语言。

参数

示例

以下示例步骤显示了如何将 ICU 分词器配置为简体中文,然后从包含中文字符的表 foo 中创建文本索引。

有关如何配置分词器的详细信息,请参阅配置分词器

  1. 使用 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
    
  2. 获取分词器的过程 ID。

    VMart=> SELECT proc_oid from vs_procedures where procedure_name = 'ICUChineseTokenizer';
    
         proc_oid
    -------------------
     45035996280452894
    (1 row)
    
  3. 将参数 locale 设置为简体中文。使用过程 ID 标识分词器。

    VMart=> SELECT v_txtindex.SET_TOKENIZER_PARAMETER('locale','zh_CN' using parameters proc_oid='45035996280452894');
     SET_TOKENIZER_PARAMETER
    -------------------------
     t
    (1 row)
    
  4. 锁定分词器。

    VMart=> SELECT v_txtindex.SET_TOKENIZER_PARAMETER('used','true' using parameters proc_oid='45035996273762696');
     SET_TOKENIZER_PARAMETER
    -------------------------
     t
    (1 row)
    
  5. 创建示例表 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
    
  6. 对表 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
    
  7. 查看新索引。

    VMart=> SELECT * FROM index_example ORDER BY token,doc_id;
     token  | doc_id
    --------+--------
     中华    |      1
     人民   |      1
     共和国 |      1
    (3 rows)