es使用json作为数据的交互格式,因此可以说,只要json支持的数据类型,es都是支持的。
首先就是核心数据类型,主要包括如下几个:
string、byte、short、integer、long、float、double、boolean、date
然后就是复合数据类型,主要就是两个:
array、object
其实这里要说的就是,Lucene并没有嵌套对象的概念,原文表述如下:A Lucene document consists of a flat list of key-value pairs。Lucene only indexes scalar or simple values,not complex datastructures。
也就是说,es对其做了平坦化处理,比如user是一个子文档,其实是这样的:
{
"name": [our,club]
"user.name": [newstar]
"user.gender": [male]
}
而对于数组的平坦化处理,则是稍有不同,比如原始数据如下:
{
"followers": [
{ "age": 26, "name": "Xin Xing"},
{ "age": 28, "name": "Lu Jie"},
{ "age": 24, "name": "Geng Xue"}
]
}
在平坦化之后,我们的数据应该是这样子的:
{
"followers.age": [24,26,28],
"followers.name": [geng,xue,lu,jie,xin,xing]
}