材料
食材:鲈鱼、小葱、姜
调料:蒸鱼豉油
加强彼此联系,努力实现盖娅星系!
Elasticsearch 允许使用模板语言 mustache 来预设搜索逻辑,在实际搜索时,通过参数中的键值,对来替换模板中的占位符,最终完成搜索。该方式将搜索逻辑封闭在 Elasticsearch 中,可以使下游服务,在不知道具体搜索逻辑的情况下完成数据检索。我们以 Kibana 自带的航班数据kibana_sample_data_flights
为基础,以按航班号搜索为例,简单介绍搜索模板的使用。
第一步,创建 ID 为 testSearchTemplate 的搜索模板,语句如下
1 | POST _scripts/testSearchTemplate |
第二步,传参搜索数据,语句如下
1 | GET kibana_sample_data_flights/_search/template |
以上两步就是使用模板搜索数据,该逻辑等同于下面这个搜索
1 | GET kibana_sample_data_flights/_search |
Elasticsearch 本着让用户方便快捷的使用搜索功能的原则,对数据定义(索引定义)做了高度抽象,尽可能得避免了重复性定义工作,使之更加灵活。
Elasticsearch 在这方面做的工作主要体现是索引模板(Index template)和动态映射(Dynamic Mapping)两个功能。索引模板的主要功能,是允许用户在创建索引(index)时,引用已保存的模板来减少配置项。操作的一般过程是先创建索引模板,然后再手动创建索引或保存文档(Document)。而自动创建索引时,索引模板会作为配置的基础作用。对于 X-Pack 的数据流(Data Stream)功能,索引模板用于自动创建后备索引(Backing Indices)。该功能的意义是提供了一种配置复用机制,减少了大量重复作劳动。
目前 Elasticsearch 的索引模板功能以 7.8 版本为界,分为新老两套实现,新老两个版本的主要区别是模板之间复用如何实现。
老版本:
使用优先级(order)关键字实现,当创建索引匹配到多个索引模板时,高优先级会继承并铺盖低优先级的模板配置,最终多个模板共同起作用。
新版本:
删除了 order 关键字,引入了组件模板 Component template 的概念,是第一段可以复用的配置块。在创建普通模板时可以声明引用多个组件模板,当创建索引匹配到多个新版索引模板时,取用最高权重的那个。
下面将以生命周期(创建、查看、使用、删除)为切入点,分别介绍如何使用 Elasticsearch 新老两个版本的索引模板。
通常来说,搜索数据一般需要经过 3 个步骤:
定义数据(建表建索引)
录入数据
搜索数据
在现实使用中,定义数据往往是比较繁琐,并且有大量的重复操作。
Elasticsearch 本着让用户使用更方便快捷的原则,针对这个问题做了很多工作,使定义数据的方式更加抽象灵活,多个雷同的字段可使用 1 个配置完成。
比较有代表性的2个功能分别是:
索引模板(index template):可以根据规则自动创建索引。
动态映射(dynamic mapping):自动将新字段添加到映射中。
本小节我们着重介绍动态映射(dynamic mapping)
根据官方的定义动态映射可以自动检测和添加新字段(field)到映射(mapping)中。动态映射可以通过基础属性自动发现(Dynamic field mappings)以及复杂属性动态生成(Dynamic templates)2个方式实现此功能。