Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 从嵌套查询中筛选记录-弹性搜索_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch 从嵌套查询中筛选记录-弹性搜索,elasticsearch,elasticsearch" /> elasticsearch 从嵌套查询中筛选记录-弹性搜索,elasticsearch,elasticsearch" />

elasticsearch 从嵌套查询中筛选记录-弹性搜索

elasticsearch 从嵌套查询中筛选记录-弹性搜索,elasticsearch,elasticsearch,我有嵌套的数组字段,我需要查询和过滤记录。 样品 下面是我如何需要以下条件的查询, 1.其中Name等于要获取的两个[“vanaraj”,“ranjit”] 2.仅为“vanaraj”添加年龄大于25岁的条件 我需要下面这样的查询,但它不起作用 { "query": { "bool": { "filter": [ { "nested": { "path": "data.test.name",

我有嵌套的数组字段,我需要查询和过滤记录。 样品

下面是我如何需要以下条件的查询, 1.其中Name等于要获取的两个[“vanaraj”,“ranjit”] 2.仅为“vanaraj”添加年龄大于25岁的条件

我需要下面这样的查询,但它不起作用

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "data.test.name",
            "query": {
              "bool": {
                "filter": [
                  {
                    "terms": {
                      "data.test.name.name": ["vanaraj","ranjit"]
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "data.test.name",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "data.test.name.name": "vanaraj"
                    }
                  },
                  {
                    "range": {
                       "data.test.name.Age": {
                                            "gt": 25
                        }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
映射:

{  
   "mappings":{  
      "properties":{  
         "test":{  
            "properties":{  
               "name":{  
                  "type":"nested",               
                  "properties":{  
                     "Age":{  
                        "type":"long"
                     },
                     "name":{  
                        "type":"text",
                        "fields":{  
                           "keyword":{  
                              "type":"keyword",
                              "ignore_above":256
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

根据您的进一步说明,以下代码应能帮助您:

解决方案: 更新的解决方案:
POST/\u搜索
{
“查询”:{
“布尔”:{
“应该”:[
{
“嵌套”:{
“路径”:“test.name”,
“查询”:{
“布尔”:{
“必须”:[
{
“匹配”:{
“test.name.name”:“vanaraj”
}
},
{
“范围”:{
“test.name.Age”:{
“gte”:26
}
}
}
]
}
}
}
},
{
“嵌套”:{
“路径”:“test.name”,
“查询”:{
“布尔”:{
“必须”:[
{
“条款”:{
“test.name.name”:[
“abc”,
“兰吉特”
]
}
}
]
}
}
}
}
],
“不得”:[
{
“嵌套”:{
“路径”:“test.name”,
“查询”:{
“布尔”:{
“必须”:[
{
“条款”:{
“test.name.name”:[
“瓦纳拉杰”
]
}
},{
“范围”:{
“test.name.Age”:{
“lte”:25
}
}
}
]
}
}
}
}
]
}
}
}

请运行上面的,让我知道这是否有帮助

这个答案应该有帮助:我需要一个如下的查询,但它不起作用。你能分享你的映射信息吗?在你的查询中,它过滤所有字段的范围,我只需要Vanaraj,年龄>26岁,在你的“abc”情况下,它应该返回两个结果“abc”,年龄=26岁和年龄10岁。因此,如果我理解正确,它应该是检索您有“ranjit”的所有文档,并且(仅当年龄>=26时才检索vanaraj),只有当您的映射是我提到的映射时,上面的查询才会这样做。否则它将不起作用。没有意义,那么为什么有
vanaraj
age
子句。如果您不考虑
年龄
而这样做,则您正在提取所有具有
vanaraj
的文档。基本上,得到你想要的东西的唯一方法就是使用我提到的解决方案。您必须后退一步,了解以您希望的方式运行查询时得到的结果。@user2602635请立即尝试
更新的解决方案
,并告知met这是否解决了您的问题。我希望这现在能奏效:|我很高兴你找到了解决办法。也可以随意投票;)
{  
   "mappings":{  
      "properties":{  
         "test":{  
            "properties":{  
               "name":{  
                  "type":"nested",               
                  "properties":{  
                     "Age":{  
                        "type":"long"
                     },
                     "name":{  
                        "type":"text",
                        "fields":{  
                           "keyword":{  
                              "type":"keyword",
                              "ignore_above":256
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}
POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "test.name",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "test.name.name": "vanaraj"
                    }
                  },
                  {
                    "range": {
                      "test.name.Age": {
                        "gte": 26
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "test.name",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "test.name.name": "ranjith"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }  
}
Bool 
 - Should
    - Must clause for name=vanaraj and age >= 26
    - Must clause for name=ranjith
POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "test.name",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "test.name.name": "vanaraj"
                    }
                  },
                  {
                    "range": {
                      "test.name.Age": {
                        "gte": 26
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "test.name",
            "query": {
              "bool": {
                "must": [
                  {
                    "terms": {
                      "test.name.name": [
                        "abc",
                        "ranjit"
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ],
      "must_not": [
      {
          "nested": {
            "path": "test.name",
            "query": {
              "bool": {
                "must": [
                  {
                    "terms": {
                      "test.name.name": [
                        "vanaraj"
                      ]
                    }
                  },{
                    "range": {
                      "test.name.Age": {
                        "lte": 25
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}