(一)准备
1,elasticSearch 5.6.9
2,kibana 5.6.9
3,jdk1.8
(二)创建索引,文档
1创建数据库
PUT /database?pretty
2创建子文档指向父文档(不用指定类型也可)
PUT database/station/_mapping
{
"station":{
"_parent":{
"type":"line"
},
"properties":{
"stationId":{"type":"long"},
"stationName":{"type":"text"}
}
}
}
(三)填充数据
插入父文档一条记录
插入id = 1的6路
POST /database/line/1
{
"lineName":"6路",
"lineId":"100"
}
插入id = 2的966路
POST /database/line/2
{
"lineName":"966路",
"lineId":"101"
}
插入子文档内容
插入station = 1
POST /database/station/1?parent=1
{
"stationName":"文化路丰产路",
"stationId":"1000"
}
(四)查询内容
查询数据库中line表的那一列(文档)内容(那个内容(文档)呢?是子表含有station=1000字段的表的那一列)
POST /database/line/_search
{
"query": {
"has_child": {
"type": "station",
"query": {
"match":{
"stationId":"1000"
}
}
}
}
}
查询station 中的文档,条件是父索引是line
POST /database/station/_search
{
"query": {
"has_parent": {
"type": "line",
"query": {
"match":{
"lineId":"100"
}
}
}
}
}
通过子文档内容查询父文档
GET database/line/_search
{
"query": {
"has_child": {
"type": "station",
"query": {
"match": {
"stationId": "1000"
}
}
}
}
}
排序查询之前需要开启字段可排序!!!
PUT database/_mapping/line
{
"properties":{
"lineId":{
"type":"text",
"fielddata":true
}
}
}
父子文档查询(模糊匹配父文档,级联子文档 并排序)
POST /database/line/_search
{
"query": {
"bool": {
"must": [{
"wildcard": {"lineName": "6"}
},{
"has_child": {
"type": "station",
"query": {
"bool": {
"must": [
{"term": {"stationId": "1000"}}
]
}
},
"inner_hits": {"size":1000,
"sort": [
{
"stationId": "asc"
}
]}
}
}]
}
},
"sort": [
{
"lineId": "asc"
}
],
"size": 1000
}