Elasticsearch - 如何将此简单SQL查询转换为弹性搜索请求

时间:2016-05-05 14:06:21

标签: sql elasticsearch syntax filter elastica

我需要像这样翻译简单的SQL: "and" 进入elasticsearch查询。

我提出了一个查询(在下面发布)看起来像是在做我需要做的事情,但是我无法在SQL的第一个()中创建{ "query": { "filtered": { "filter": { "bool": { "should": [ { "terms": { "abc1": [x, y, z] } }, { "terms": { "abc2": [x, y, z] } }, { "terms": { "abc3": [x, y, z] } }, ] } }, "query": { "bool": { "must": [ { "terms": { "abc7": [x, y, z] } }, { "nested": { "path": "nestedpath", "query": { "bool": { "must": [ { "range": { "nestedpath.abc6": { "lt": 5 } } } ] } } } } ] } } } } } 部分。在尝试使用JSON时,我一直在获取弹性搜索错误或没有结果。我认为正确的答案是使用带有"_source": { "group": { "abc1": "x", "abc2": "y", "abc3": "z" }, "anotherGroup": { "abc4": "y", "abc5": "z" }, "nestedpath": [ { "abc6": 2 } ], "abc7": "x" } 密钥的过滤查询,但我无法找到正确的变体。

有人可以帮帮我吗?我正在失去希望,同时试图解决这个问题大约一个星期。或者你能否至少告诉我,如果我正朝着正确的方向解决这个问题?非常感谢你。

{{1}}

这样的事情应该是匹配的:

{{1}}

2 个答案:

答案 0 :(得分:0)

如果你的映射是这样的:

{
  "test7" : {
    "mappings" : {
      "my_type3" : {
        "properties" : {
          "abc7" : {
            "type" : "string"
          },
          "anothergroup" : {
            "properties" : {
              "abc4" : {
                "type" : "string"
              },
              "abc5" : {
                "type" : "string"
              }
            }
          },
          "group" : {
            "properties" : {
              "abc1" : {
                "type" : "string"
              },
              "abc2" : {
                "type" : "string"
              },
              "abc3" : {
                "type" : "string"
              }
            }
          },
          "nestedpath" : {
            "type" : "nested",
            "properties" : {
              "abc6" : {
                "type" : "long"
              }
            }
          }
        }
      }
    }
  }
}

此查询将符合您的要求:

{
   "query":{
      "filtered":{
         "filter":{
            "bool":{
               "must":[
                  {
                     "bool":{
                        "should":[
                           {
                              "terms":{
                                 "group.abc1":[
                                    "x",
                                    "y",
                                    "z"
                                 ]
                              }
                           },
                           {
                              "terms":{
                                 "group.abc2":[
                                    "x",
                                    "y",
                                    "z"
                                 ]
                              }
                           },
                           {
                              "terms":{
                                 "group.abc3":[
                                    "x",
                                    "y",
                                    "z"
                                 ]
                              }
                           }
                        ]
                     }
                  },
                  {
                     "bool":{
                        "should":[
                           {
                              "terms":{
                                 "anothergroup.abc4":[
                                    "x",
                                    "y",
                                    "z"
                                 ]
                              }
                           },
                           {
                              "terms":{
                                 "anothergroup.abc5":[
                                    "x",
                                    "y",
                                    "z"
                                 ]
                              }
                           }
                        ]
                     }
                  },
                  {
                     "nested":{
                        "path":"nestedpath",
                        "query":{
                           "bool":{
                              "must":{
                                 "range":{
                                    "nestedpath.abc6":{
                                       "lt":5
                                    }
                                 }
                              }
                           }
                        }
                     }
                  },
                  {
                     "terms":{
                        "abc7":[
                           "x",
                           "y",
                           "z"
                        ]
                     }
                  }
               ]
            }
         }
      }
   }
}

答案 1 :(得分:0)

使用POST / _xpack / sql / translate, U可以在ES上运行sql,并且U可以将sql转换为ES查询 参见:[https://www.elastic.co/blog/an-introduction-to-elasticsearch-sql-with-practical-examples-part-1]