从Elasticsearch中移除type
我正在开发一个应用程序,同时也是为了学习Elasticsearch。我现在正考虑添加一些小功能,但是我无法成功地扩展现有的数据结构,让我感到很困惑。
突然,我偶然看到以下文章,其中写着 Elasticsearch 6 中 “_type 被弃用”,让我非常吃惊。因为我创建的索引中有三个 _type,并且其中两个还是父子结构。
-
- CA.io #1 – マッチングサービスを支えるElasticsearchメモ
- Elasticsearchの勉強会(CA.io#1)のメモ
我认为这样做肯定无法过渡到ES7的时代,所以我进行了对策的研究。
-
- Removal of mapping types
- Indices, types, and parent / child: current status and upcoming changes in Elasticsearch
作为让 type 退役的原因,上述文章提到了关于 Elasticsearch 的 type 的误解。
在Elasticsearch索引中,不同映射类型中具有相同名称的字段在内部由相同的Lucene字段支持。
因此,即使它们是不同的类型,在内部使用的是相同的Lucene字段,所以无法根据类型来更改字段的类型。
此外,
此外,将具有少量或没有共同字段的不同实体存储在同一索引中会导致稀疏的数据,并干扰Lucene对文档进行高效压缩的能力。
听说,当把共通项目少的数据放入相同的索引时,Lucene的文档压缩效率会下降。有很多我不知道的事情,这真是一次非常有益的学习。
那么,解决方法就是每个索引只使用一个类型。
之前使用_type的部分,您可以自己定义类型来完成类似的操作。在上述页面上有使用reindex API的示例。
因此,我打算從根本上重新審視我的應用程序數據設計。當將「索引的類型只能有一個」的限制加諸於其中時,我覺得設計反而變得簡潔,猶如道路閃爍開放。我認為應該將商業需求反映在索引的結構上,而不是依賴於Elasticsearch的各種搜索功能。我認為這正是Elasticsearch擅長的領域。