加入/合并Elasticsearch结果

时间:2015-04-27 13:12:30

标签: elasticsearch

我们有一个带有(简化)结构的文档,如Elasticsearch中所示:

{ _id: ..., patientId: 4711, text: "blue" } 
{ _id: ..., patientId: 4711, text: "red" }
{ _id: ..., patientId: 4712, text: "blue" } 
{ _id: ..., patientId: 4712, text: "green" } 
{ ... }

如何创建查询以查找包含该文本的所有文档 在同一患者中bluered

在上面的示例中,我希望结果集包含patientId 4711的两个文档(包含bluered)。

潜在的解决方案策略可能是:

  • 运行两个查询并且"加入"后来应用程序逻辑的结果。
  • 根据先前的患者列表运行单独的查询。只有当潜在患者数量很少时才可行。

是否有更好的方法(理想的一个查询)来处理这个用例?

2 个答案:

答案 0 :(得分:0)

您只需使用bool querybool filter

即可

使用bool过滤器的示例

{
    "filtered" : {
        "query" : {
            "match_all" : { }
        },
        "filter" : {
            "bool" : {


                "Must" : [
                    {
                        "term" : { "text" : "blue" }
                    },
                    {
                        "term" : { "text" : "red" }
                    }
                ]
            }
        }
    }
}

修改:误读了要求:

您应该使用field collapsing

答案 1 :(得分:0)

如何更改将数据存储到elastisearch中的方式。 只需为一个患者编号存储一个文档,然后将文本保留为分配给该患者的所有不同颜色的数组即可。