2016-05-12 2 views
2

У меня есть один условный запрос в MySQL я хочу, чтобы преобразовать его в elasticsearch запроса:Условный запрос в elasticsearch

Query:

У меня есть список продуктов страница с поиском цены рейнджера. Если пользователь использует этот поиск, я хочу проверить, продается ли продукт, тогда он должен рассмотреть продажную цену еще продажной цены. (проверка продажа: я проверить продажу по текущей дате между sale_start и датой sale_end.)

MySql запросов:

SELECT * 
FROM `product_sku` 
WHERE 
((sale_start < '2016-05-12 15:23:53' AND sale_end > '2016-05-12 15:23:53' AND sale_price between 600 AND 1800) 
OR (sale_end < '2016-05-12 15:23:53' AND selling_price between 600 AND 1800) 
) 

Elasticsearch Запрос:

$params = [ 
      'index' => 'index', 
      'type' => 'product-list', 
      'body' => [ 
       "query" => [ 
        "filtered" => [ 
         "query" => [ 
          "match_all" => [], 
         ], 
         'query' => $query, 

         "filter" => [ 
          "nested" => [ 
           "path" => "default_product_low_price_with_seller", 
           "filter" => [ 
            "bool" => [ 
             "should" => [ 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.sale_price" => [ 
                 "gte" => $_GET['filter']['price']['from'], 
                 "lte" => $_GET['filter']['price']['to'], 
                ], 
               ], 
              ], 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.sale_end" => [ 
                 "gte" => $now, 
                ], 
               ], 
              ], 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.sale_start" => [ 
                 "lte" => $now, 
                ], 
               ], 
              ], 

             ], 
            ], 
           ], 
           "filter" => [ 
            "bool" => [ 
             "should" => [ 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.selling_price" => [ 
                 "gte" => $_GET['filter']['price']['from'], 
                 "lte" => $_GET['filter']['price']['to'], 
                ], 
               ], 
              ], 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.sale_end" => [ 
                 "lte" => $now, 
                ], 
               ], 
              ], 
              [ 
               "range" => [ 
                "default_product_low_price_with_seller.sale_start" => [ 

                 "gte" => $now, 
                ], 
               ], 
              ], 

             ], 
            ], 
           ], 
          ], 
         ], 
        ], 
       ], 
       "aggs" => [ 
        "brand_name" => ["terms" => ["field" => "brand_name"]], 
        "category_with_in_title" => [ 
         "nested" => [ 
          "path" => "category_with_in_title.parent_cat", 
         ], 
         "aggs" => [ 

          "category_with_in_title.title" => ["terms" => ["field" => "category_with_in_title.parent_cat.title"]], 
         ], 
        ], 
       ], 
      ], 
     ]; 
+0

Где мой запрос mysql? –

+0

Я обновил свой вопрос .... –

ответ

0

Попробуйте это запрос:

{ 
    "query": { 
    "nested": { 
     "path": "default_product_low_price_with_seller", 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "bool": { 
       "must": [ 
        { 
        "range": { 
         "default_product_low_price_with_seller.sale_price": { 
         "gte": 100, 
         "lte": 300 
         } 
        } 
        }, 
        { 
        "range": { 
         "default_product_low_price_with_seller.sale_start": { 
         "lte": "2016-05-05" 
         } 
        } 
        }, 
        { 
        "range": { 
         "default_product_low_price_with_seller.sale_end": { 
         "gte": "2016-05-05" 
         } 
        } 
        } 
       ] 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { 
        "range": { 
         "default_product_low_price_with_seller.selling_price": { 
         "gte": 100, 
         "lte": 300 
         } 
        } 
        }, 
        { 
        "range": { 
         "default_product_low_price_with_seller.sale_end": { 
         "lte": "2017-05-05" 
         } 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Таким образом, два условия являются ветвями глобального списка should, и под каждой ветвью есть строка из must операторов в соответствии с новым запросом bool.