2016-05-12 13 views
2

Ich habe eine bedingte Abfrage in Mysql ich es in Elasticsearch Abfrage konvertieren möchten:Bedingte Abfrage in Elasticsearch

Abfrage:

I Produktliste Seite mit Preis Ranger Suche. Wenn Benutzer diese Suche verwenden, die ich überprüfen möchte, ob das Produkt einen Verkauf hat, dann sollte es den Verkaufspreis berücksichtigen. (Scheck Verkauf: i bin Überprüfung Verkauf durch aktuelles Datum zwischen sale_start und sale_end Datum.)

MySql Abfrage:

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 Abfrage:

$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

Wo ist Ihre MySQL-Abfrage? –

+0

Ich habe meine Frage aktualisiert .... –

Antwort

0

Versuchen Sie, diese Abfrage:

{ 
    "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" 
         } 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Also, die beiden Bedingungen sind Zweige einer globalen should Liste und unter jeder Verzweigung gibt es eine Reihe von must Anweisungen unter einer neuen bool Abfrage.