有时在我的结果集中,我的项目具有相同的_score并且没有问题,但我想提取start_date和end_date介于" now"之间的文档。在同一个_score中。
基本上我想在ElasticSearch中完成相同的工作:
SELECT * FROM tbl WHERE ... ORDER BY _score DESC, (start_date <= NOW() AND NOW() <= end_date) DESC
我该怎么做?
答案 0 :(得分: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"
}
}
]