我们有一个带有(简化)结构的文档,如Elasticsearch中所示:
{ _id: ..., patientId: 4711, text: "blue" }
{ _id: ..., patientId: 4711, text: "red" }
{ _id: ..., patientId: 4712, text: "blue" }
{ _id: ..., patientId: 4712, text: "green" }
{ ... }
如何创建查询以查找包含该文本的所有文档
在同一患者中blue
和red
。
在上面的示例中,我希望结果集包含patientId 4711
的两个文档(包含blue
和red
)。
潜在的解决方案策略可能是:
是否有更好的方法(理想的一个查询)来处理这个用例?
答案 0 :(得分:0)
您只需使用bool query或bool filter
即可使用bool过滤器的示例
{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"bool" : {
"Must" : [
{
"term" : { "text" : "blue" }
},
{
"term" : { "text" : "red" }
}
]
}
}
}
}
修改:误读了要求:
您应该使用field collapsing
答案 1 :(得分:0)
如何更改将数据存储到elastisearch中的方式。 只需为一个患者编号存储一个文档,然后将文本保留为分配给该患者的所有不同颜色的数组即可。