单个索引中两个弹性类型之间的内部联接操作

时间:2016-05-14 01:15:39

标签: elasticsearch lucene nest nosql

我有两种类型,例如弹性索引中的员工和城市,

类型员工的文档结构类似于

[{
    "_index": "zase",
    "_type": "Employees",
    "_id": "100",
    "_score": 1,
    "_source": {
        "sid": 100,
        "name": "San Andreas",
        "stageid": 0
    }
},
{
    "_index": "zase",
    "_type": "Employees",
    "_id": "101",
    "_score": 1,
    "_source": {
        "sid": 101,
        "name": "Zack",
        "stageid": 0
    }
}]

Type Cities的文档结构如Follows,

[{
    "_index": "zase",
    "_type": "Cities",
    "_id": "1",
    "_score": 1,
    "_source": {
        "sid": 1,
        "name": "Virginia",
        "EmployeesID": [
            0:100,
            1:125,
            2:143
        ]
    }
},
{
    "_index": "zase",
    "_type": "Cities",
    "_id": "2",
    "_score": 1,
    "_source": {
        "sid": 2,
        "name": "New Field",
        "EmployeesID": [
            0: 110
        ]
    }
}]  

使用Cities name' Virginia'查询弹性搜索时,我需要获取Employees信息,其中Cities.EmployeesID == Employees.sid,

在弹性搜索中,这种跨越不同类型的RDBMS加入操作是否可行? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

ES尚不支持JOIN查询,虽然正在讨论issue和尝试提供该功能的pull request,但目前某些冲突导致工作停滞不前。

与此同时,对于您的简单用例,您可以使用elasticsearch-sql插件来实现您的目标。

答案 1 :(得分:0)

如果这是数据检索的主要用例,您也可以考虑使用parent-child关系。