将MySQL查询(带where条件)转换为Elasticsearch查询

时间:2017-11-14 10:53:06

标签: mysql elasticsearch elasticsearch-5

我需要"转换" mysql查询到Elasticsearch查询。阻止我的是"其中"声明。基本上我需要的是找到基于纬度和经度在25英里范围内的所有物品以及启用取件的地方其中物品已启用交付并提供邮政编码

where
(
    (
        `enabled_pickup` = '1'
        and(
            ST_Distance_Sphere(
                POINT(- 122.41941550000001 , 37.7749295) ,
                geolocation
            ) / 1000 * 0.62137119223733
        ) <= 25
    )
    or(
        `enabled_delivery` = '1'
        `zip_code` = '94116'
    )
)

这是Elasticsearch查询无法按预期工作

{
"query": {
    "bool": {
      "must": [
        {
      "bool": {
        "should": [
          {
            "bool": {
              "must": [
                {
                  "match": {
                    "enabled_pickup": "1"
                  }
                },
                {
                  "geo_distance": {
                    "distance": "25 mi",
                    "geo_location": {
                      "lat": "37.7749295",
                      "lon": "-122.41941550000001"
                    }
                  }
                }
              ]
            }
          },
          {
            "bool": {
              "must": [
                {
                  "term": {
                    "dispensary.delivery": "1"
                  }
                },
                {
                  "term": {
                    "zip_code": "94116"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

} }

有人可以指点我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

我正在阅读有关类似问题的内容,您可以尝试使用以下查询。你可以找到this stackoverflow discussion

解决的类似问题

希望这有帮助,干杯!

{
"query": {
        "bool": {
            "should": [
                {
                    "bool": {
                      "must": [
                            {"match": { "enabled_pickup": "1"}}
                            ,{ "match": {
                                  "geo_distance": { 
                                        "distance": "25 mi", 
                                        "geo_location": {
                                            "lat": "37.7749295",
                                            "lon": "-122.41941550000001"
                                        }
                                    }
                                }
                            }
                        ]
                    }
                  ,
                    "bool": {
                      "must": [
                            { "match": {"dispensary.delivery": "1"} }
                            ,{"match": {"zip_code": "94116"} }
                        ]
                    }
                }
            ]
        }
    }
}