我正在尝试为以下输入(对象数组)编写查询。
"UserDetails": [
{ "Name" : "Vanaraj", "Age" : "27", "country" : "India" },
{ "Name" : "Ranjit", "Age" : "26", "country" : "US" }
]
名称,年龄,国家/地区是三个不同的字段,它们的类型是文本。 从前端开始,输入将像上述所有三个字段与数组的组合一样。
我需要使用这三个组合编写查询,并基于所有三个字段及其值的组合从索引中过滤记录。 “ UserDetails”只是一个名称,我提到了索引中仅存在的三个字段。
使用{“名称”:“ Vanaraj”,“年龄”:“ 27”,“国家”:“印度”}和{“名称”:“ Ranjit”,“年龄”:“的组合搜索索引26“,” country“:” US“}和输出应该与这些组合相匹配。
答案 0 :(得分:0)
如果我正确理解了您的问题,那么我相信您正在寻找类似的东西。
它看起来有些古怪,但大致可以翻译为: “找到我(印度27岁的瓦纳拉吉)或(美国26岁的兰吉特)。”
# Setup a sample index with data
PUT /stackoverflowtest/_doc/1
{ "Name" : "Vanaraj", "Age" : "27", "country" : "India" }
PUT /stackoverflowtest/_doc/2
{ "Name" : "Ranjit", "Age" : "26", "country" : "US" }
PUT /stackoverflowtest/_doc/3
{ "Name" : "Joe", "Age" : "38", "country" : "US" }
# Query that returns Vanaraj / 27 / India or Ranjit / 26 / US
POST /stackoverflowtest/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"Name": "Vanaraj"
}
},
{
"match": {
"Age": "27"
}
},
{
"match": {
"country": "India"
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"Name": "Ranjit"
}
},
{
"match": {
"Age": "26"
}
},
{
"match": {
"country": "US"
}
}
]
}
}
]
}
}
}