Преобразование запроса MySQL (с условием where) в запрос Elasticsearch

Мне нужно «преобразовать» запрос 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"
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

} }

может кто-нибудь указать мне в правильном направлении?


person Dejan Dragas    schedule 14.11.2017    source источник


Ответы (1)


Я читал о похожей проблеме, вы можете попробовать с запросом ниже. вы можете найти решение аналогичного вопроса в этом обсуждении stackoverflow

Надеюсь, это поможет, Ура!

{
"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"} }
                        ]
                    }
                }
            ]
        }
    }
}
person segFaulter    schedule 14.11.2017