2016-04-12 16 views
1

Bazen sonuç kümemde aynı _score değerine sahip öğelerim var ve sorun yok ama başlangıç_tarihi ve bitiş_tarihi aynı _score içinde "şimdi" arasında olan belgeleri almak istiyorum .ElasticSearch'te ek mantıkla çoklu sütun sıralaması

SELECT * FROM tbl WHERE ... ORDER BY _score DESC, (start_date <= NOW() AND NOW() <= end_date) DESC 

Bunu nasıl yapabilirim:

Temelde ElasticSearch bunun ancak bir eşdeğer başarmak istiyoruz?

cevap

2

Bu (start_date <= NOW() AND NOW() <= end_date) karşılaştırmasını sorgu puanı hesaplamasının içine entegre etme hakkında ne düşünüyorsunuz?

"query": { 
    "bool": { 
     "must": [ 
     // your query here 
     ], 
     "should": [ 
     { 
      "bool": { 
      "must": [ 
       { 
       "range": { 
        "start_date": { 
        "lte": "2015-03-03" 
        } 
       } 
       }, 
       { 
       "range": { 
        "end_date": { 
        "gte": "2015-03-03" 
        } 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 

Veya kullanarak komut olasılığı da vardır:

"sort": [ 
    { 
     "_score": { 
     "order": "desc" 
     } 
    }, 
    { 
     "_script": { 
     "type": "number", 
     "script": "def now_date=new DateTime(new Date()); if (doc['start_date'].date <= now_date && doc['end_date'].date >= now_date) return 1; return 0", 
     "order": "desc" 
     } 
    } 
    ]