0
点赞
收藏
分享

微信扫一扫

Elasticsearch做"关联查询"——nested-parent关系


Elasticsearch作为一个面向文档的存储服务,并没有严格意义上的关联查询能力。但可以通过mapping来指定文档的nested-parent关系,实现关联。 

下面以学生(student)和班级(clazz)的关系为例,演示这种"关联查询":

 建立一个索引test,有student和clazz两个type,存储班级和学生

首先设置班级和学生的mapping:


PUT /test      


       {      


                "mappings"        : {       


                "clazz"        : {       


                "properties"        : {       


                "students"        : {       


                "type"        :        "nested"       


                }       


                }       


                },       


                "student"        :{       


                "_parent"        : {       


                "type"        :        "clazz"       


                }       


                }       


                }       


       }




实测clazz的映射描述可以省略

插入测试数据

//班级      


       PUT /test/clazz/c1      


       {      


                "name"        :        "class1"        ,       


                "teacher"        :        "Mr wang"       


       }      


              


       //学生,通过parent=c1将其关联至班级class1      


       PUT /test/student/s1?parent=c1      


       {      


                "name"        :        "tom"        ,       


                "age"        :        15       


       }      


       //学生,通过parent=c1将其关联至班级class1      


       PUT /test/student/s2?parent=c1      


       {      


                "name"        :        "小明"        ,       


                "age"        :        16       


       }

 



 

然后就可以查询了


//查询班级class1中有哪些学生     


      GET /test/student/_search     


      {     


              "query"       : {      


              "has_parent"       : {      


              "type"       :       "clazz"       ,      


              "query"       : {      


              "match"       :{      


              "name"       :       "class1"      


              }      


              }      


              }      


              }      


      }     


            


      //查询小明在哪个班     


      GET /test/clazz/_search     


      {     


              "query"       : {      


              "has_child"       : {      


              "type"       :       "student"       ,      


              "query"       : {      


              "term"       : {      


              "name"       : {      


              "value"       :       "小明"      


              }      


              }      


              }      


              }      


              }      


      }     


            


            


            


            


      http://www.wowtools.org/blog/articles/2015/09/08/1441692036407.html     

举报

相关推荐

0 条评论