Skip to content

映射(Mapping)

Yvette Han edited this page Aug 4, 2021 · 5 revisions

映射(Mapping)

映射是定义文档及其包含的字段的存储和索引方式的过程。 在插入数据时,需要定义源字段(source field)和目标字段(target field)。映射由一个或几个源字段组成,一个源字段可以包含一个或多个目标字段。

源字段(Source Field)

source field即为输入数据的字段。每个source field都有一个source field name,以及一个或多个target field

目标字段(target field)

target field 是建立索引后将用于使用的字段。一个目标配置字典需要以下key:

  • 目标字段名(targetFieldName)
  • 类型(type)
  • 配置(configs)

目标字段名(targetFieldName)

targetFieldName是索引后使用的字段名称。

类型(type)

确定目标字段是哪种类型。某些类型具有必须填写的配置

Mapping的字段类型

类型 描述 映射范例 数据范例
keyword 结构化字符串字段,或多个字符串组成的数组 {type: keyword, normalizer: None} sports / ['basketball','football']
float 浮点数 {type: float} 1.2
integer 整数数字 {type: intger} 1
vector 密集的向量 {type: vector, num_dim: 123, q_processor: xxx, model_id: xxx, ANN_type: lsh, L: 10, K: 6} [1,2,3]
term_score 稀疏加权向量 {type: term_score, mode: float, q_processor: xxx, model_id: xxx} {a: 1.1, b: 2.2}
text 自然语言文字 {type: text, lang: en, index: bm25 q_processor: xxx, processor: xxx} I love Paris.
datetime/date 日期时间 {type: datetime, format: xxx} 20220202T12:30:333
object 只会存储但不会处理的任何对象 {type: object} any JSON dict
meta 该索引的元信息 {type: meta, value: {xxx}} any JSON dict

不同类型的参数细节

vector

ANN_type 是否使用向量检索加速算法,可选参数有:

  • None: 不传ANN_type参数,正常的全库向量检索
  • lsh: 使用lsh算法向量检索加速,附带参数 L 和 K, 加大L提高召回率,检索速度变慢,加大K检索速度变快,降低召回率,可不传,默认为L=10, k=6
  • permutation_lsh: permutation_lsh算法向量检索加速, 附带参数K,加大K提高召回率,检索速度变慢, 可不传,默认为k=10

keyword 类型参数细节

normalizer 是否对keyword进行特殊处理,可选参数有:

  • None: 不传此参数,不进行任何处理
  • lowercase: keyword不区分大小写

datetime/date 类型参数细节

format 是否对自定义时间格式,可选参数有:

  • None: 不传此参数,使用默认时间格式
  • 自定义时间格式,用||隔开, 如:yyyy-MM-dd HH:mm:ss||yyyy-MM-dd

配置(configs)

除了每种类型的必需配置。您还可以添加自定义配置。有关自定义配置的更多信息将在稍后推出。 目标字段类型(target field types) 目标字段类型可以是以下类型中的任意一个 {"keyword", "text", "term_score", "vector", "datetime", "int", "float"}.、

关键字 (keyword)

“关键字”用于存储字符串数据类型。

文本(Text)

“文本”同样用于存储字符串数据类型。文本数据类型和关键字数据类型之间的主要区别是在文本类型在索引时仅分析文本字段,而不分析关键字字段。这就是说,在索引时,文本字段被分解成它们各自的term,以允许部分匹配,而关键字字段则按原样索引.例如,如果文本字段中包含“公鸡每天打鸣”的值,则将为其所有单独的构成编制索引为:“公鸡”,“打鸣”和“每天”;对这些term的任何一项的查询都将返回这个字符串,然而如果对同一个字符串用关键词类型来索引,则不会对这个字符串进行拆分,只有查询完全匹配的“公鸡每天打鸣”才会返回这个字符串。

由于文本字段是通过这种方式进行分析的,所以它们无法按字母顺序排序。而关键字字段则可以按按典型的字母顺序进行排序。 根据不同的情况,这两种数x据类型都非常有优势。

Term Score

'term_score'是字典数据类型,他的key是term,值则是int或float。 'term_score'经常与sparse encoders或plugin一起使用

编码器id (encoder_ids):

中文文本编码器:“ bert-base-zh-mean-tokens” 中文文本编码器(Distilled):“ bert-base-zh-distill” 英文文本-sparta:“ bert-base-uncase-ti-log-max-320head-snm” 英文视觉编码器:“ visualsparta-mscoco-68.2”

Term Score的例子:

        {
          "targetFieldName": "tss",
          "type": "term_score",
          "configs": [
            {
              "key": "encoder_id",
              "value": "visualsparta-mscoco-68.2"
            }
          ]
        }
Clone this wiki locally