2016-04-12 4 views
1

時々私の結果セットに同じ_scoreを持つアイテムがありますが、それは問題ありませんが、start_dateとend_dateが同じ_score内の "now"の間にあるドキュメントをプルアップしたいと思います。複数の列をElasticSearchの追加ロジックでソートする

基本的に私はこれと同等のものを達成したいが、ElasticSearch中:

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

はどのように私はそれを行うことができますか?

答えて

2

(start_date <= NOW() AND NOW() <= end_date)のクエリスコア計算自体の比較はどうでしょうか?

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

か、スクリプトを使用する可能性もあります:

"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" 
     } 
    } 
    ] 
関連する問題