3.ES----IndexTemplate 和 dynamicTemplate

1.索引模板 IndexTemplate

 

可以看到setting是用来设定集群存储的,mapping是用来定义具体的索引设置.

这里需要注意一下order 的值

 

这个规定,使我们可以找到到底使用的是哪个索引模板中的设置.  上面的就是顺序.

也就是说先去配置默认的设定,如果有模板则去寻找较低的order,用较低的order的模板覆盖默认模板,

再去找order较高的模板,然后用它将order较低的模板覆盖掉,如果创建索引时,显示的指定了mappings,则用其覆盖掉之前的设定,

总之.优先级就是显示指定的mappings > order较高的mappings >order较低的mappings >默认的mappings

看下面的demo:

 

 

 

查看mapping:

 

可以看到someDate字段没有被探测为日期类型,而是设置成了text,而someNumber则被numeric_detection 探测出是数字类型,被设置成了long.

查看settings

  

 

这时可以看到 分片数与备份数都是2

 

下面是手动指定settings

 

可以看到,5已经设置成功

 

2. dynamicTemplate

 

DynamicTemplate 是更加聚焦于文本的,可以为每一个字段,或者说是每一种字段(通过匹配规则数组),设置具体的mapping,类似于关系型数据库的mapping了,而且可以更加符合我们的习惯

 

eg2:

 

有点像触发器,或者是存储过程

 

这里有个问题:在执行上面步骤后,通过

 GET my_index/_doc/1  查询得到的结果:

 

没有full_name字段,但是通过

GET my_index/_search?q=full_name:JOhN

GET my_index/_search?q=full_name:lufei

都可以查到该文档,

带着这个问题我们查下文档:

主要显示 3点:

.相当于复制到一个数组类型的字段中,而不是覆盖掉

The copy_to parameter allows you to copy the values of multiple fields into a group field, which can then be queried as a single field. For instance, the first_name and last_name fields can be copied to the full_name field,

copy_to参数允许您将多个字段的值复制到一个组字段中,然后可以作为单个字段进行查询。例如,可以将first_name和last_name字段复制到full_name字段.

二. 这个是对第一点的解释,其实就是相当于存储了一个数组

The first_name and last_name fields can still be queried for the first name and last name respectively, but the full_name field can be queried for both first and last names.

“名”和“姓”字段仍然可以分别查询“名”和“姓”,但“全名”字段可以同时查询“名”和“姓”。

 

三.总结

It is the field value which is copied, not the terms (which result from the analysis process).

它只是复制了值,但不是字段(这是分词过程的结果)

 

The original _source field will not be modified to show the copied values.

不会修改原始源字段以显示复制的值。(这就是问题的答案了)

那么这又会引发一个问题,如果文档中存在了这个字段,值还是原来的值,mapping中是怎样设定的呢?

(先留下悬念)

 

The same value can be copied to multiple fields, with "copy_to": [ "field_1", "field_2" ]

同一个值可以复制到多个字段,其中“copy_to”:[“field_1”,“field_2”]

 

You cannot copy recursively via intermediary fields such as a copy_to on field_1 to field_2 and copy_to on field_2 to field_3 expecting indexing into field_1 will eventuate in field_3, instead use copy_to directly to multiple fields from the originating field.

不能通过中介字段递归复制,如FieldIto字段Field1到Field2,Copyto to Field2到Field3,以期盼field_1 的值能存在field_3中,来代替直接复制到多个字段的用法,   也就是说只能存在两级,

 

四,我们回过头来,来测试一下之前留下的悬念:

如果文档中存在了这个字段,值还是原来的值,mapping中是怎样设定的呢?

首先,我们在原来的索引中添加一个带full_name字段(数字型)的文档

 

 

 

查看mapping

 

没变化,只有一个full_name字段的mapping设定且与原来的一样

 那么我们再测试先让显示的full_name字段出现,(之前是通过copy_to隐式的创建了full_name的mapping)

删除原来的索引,再创建,起初的mapping显示:

 

这时还没有 full_name字段的mapping,然后创建一个文档只有full_name字段,还是数值类型的;

 

mapping 显示的是long型

 

再创建一个 文档让其通过copy_to 过程

 

报错了,也就是说其实通过copy_to建的字段mapping与通过文档默认生成的是一个,至于为什么现在报错了而之前没报错,是因为 long类型可以转为text类型,但text类型不能自动转为long类型.

 

elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的一个安装文件。Elasticsearch 是一个开源的实时分布式搜索和分析引擎,用于处理大规模数据集。它提供了一个简单可扩展的 RESTful API 接口,允许用户进行高效的数据搜索、分析以及存储。 这个安装文件的命名规则是根据 Python 的支持版本以及可运行平台来命名的。-py2.py3 表示可以同时兼容 Python 2 和 Python 3 版本的代码。-none-any 表示它是一个纯 Python 代码的库,不依赖于特定的操作系统或平台。 通过安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以轻松地在您的 Python 环境中使用 Elasticsearch。这个库提供了许多功能,包括连接到 Elasticsearch 实例、执行索引、搜索和分析操作,以及管理和维护 Elasticsearch 的集群和节点。您可以使用这个库来构建各种应用,如全文搜索引擎、实时日志分析等。 要安装 elasticsearch-7.12.0-py2.py3-none-any.whl,您可以使用 pip 工具,在命令行中运行以下命令: ``` pip install elasticsearch-7.12.0-py2.py3-none-any.whl ``` 安装成功后,您就可以在您的 Python 代码中导入 elasticsearch 模块,并开始使用 Elasticsearch 的功能了。 总结:elasticsearch-7.12.0-py2.py3-none-any.whl 是 Elasticsearch 的 Python 客户端库的安装文件,用于连接、操作和管理 Elasticsearch 实例。通过安装这个库,您可以在您的 Python 项目中轻松使用 Elasticsearch 的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱飞的笨鸟

如果帮到了你,是我最大的荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值