通过开源客户端使用搜索索引需要将宽表的数据同步至索引表,同步的方法是建立宽表和索引表的列映射,本文介绍列映射的配置项说明。

配置示例

宽表和索引表的列映射采用JSON文件实现,列映射的配置示例如下,将宽表testTable的数据同步至索引表democollection,宽表的f:name这一列映射到索引表的f_name_s这一列,宽表的f:age这一列映射到索引表的f_age_i这一列。
{
  "sourceNamespace": "default",
  "sourceTable": "testTable",
  "targetIndexName": "democollection",
  "indexType": "SOLR",
  "rowkeyFormatterType": "STRING",
  "fields": [
    {
      "source": "f:name",
      "targetField": "name_s",
      "type": "STRING"
    },
     {
      "source": "f:age",
      "targetField": "age_i",
      "type": "INT"
    }
  ]
}

配置项说明

宽表和索引表的列映射配置参数说明如下:

参数说明
sourceNamespace宽表的Namespace名,如果宽表没有Namespace,默认Namespace名为default。
sourceTable必选项,宽表的表名。
targetIndexName必选项,Lindorm搜索引擎的索引表名。
indexType默认配置为SOLR。
rowkeyFormatterType表示宽表中每行主键映射到索引表主键ID(数据类型为String)的方式,支持以下两种:
  • STRING:适用于宽表的主键为String类型,例如主键为row1,order0001。该方式使用Bytes.toString(byte[])函数将宽表的主键转成索引表主键ID。用户在索引中基于条件查出结果数据的主键ID后,可以使用Bytes.toBytes(String)函数将主键ID转成宽表主键。
  • HEX:适用于宽表的主键不是String类型,例如主键为12345。该方法使用org.apache.commons.codec.binary.Hex包中的encodeAsString(byte[])函数将宽表的主键转成索引表主键ID。用户在索引中基于条件查出结果数据的主键ID后,可以使用Hex.decodeHex(String.toCharArray())函数将主键ID转成宽表主键。
fields指定映射的列和类型,由以下三个参数组成。如果有多个列的配置使用半角逗号(,)分隔。
  • source:宽表中需要映射的列名,列族名和列名使用半角冒号(:)分隔。
  • targetField:映射到索引表中的列名,推荐使用搜索引擎提供的动态列功能,搜索引擎通过动态列的后缀自动识别这一列的数据类型,例如:name_s表示这一列在索引表中的数据类型为STRING。有关动态列的格式请参见 targetField 参数说明
  • type:宽表中需要映射的列的数据类型,配置时区分大小写,包括以下数据类型:
    • INT
    • LONG
    • STRING
    • BOOLEAN
    • FLOAT
    • DOUBLE
    说明 确保宽表的数据类型与配置的数据类型一致,否则会影响到索引数据的生成。在宽表引擎中需要您通过调用Bytes.toBytes(string/long/int/...)方法将对应的数据类型转化为Bytes存储至宽表中。

targetField参数说明

targetField参数表示宽表的列映射到索引表中的列。推荐使用搜索引擎提供的动态列功能,搜索引擎通过动态列的后缀自动识别这一列的数据类型,格式为列名:列的数据类型,列名以name为例,动态列支持的数据类型如下表:
数据类型targetField示例值
INTname_i
LONGname_l
STRINGname_s
STRING(映射为中文分词的数据类型)name_ik
BOOLEANname_b
FLOATname_f
DOUBLEname_d