elasticsearch - 在ElasticSearch中使用附加逻辑对多列进行排序

标签 elasticsearch

有时,在我的结果集中,我的项目具有相同的_score,这没关系,但是我想拉起start_date和end_date在同一_score中位于“现在”之间的文档。

基本上我想做到这一点,但是在ElasticSearch中:

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

我怎样才能做到这一点?

最佳答案

如何将(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"
      }
    }
  ]

关于elasticsearch - 在ElasticSearch中使用附加逻辑对多列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36568013/

相关文章:

elasticsearch - 限制Elasticsearch响应中的列文本长度

php - (Elasticsearch)如何获取所有文档的嵌套字段的最后一个元素然后执行子聚合

elasticsearch - Elasticsearch,查找没有匹配值的文档

ruby-on-rails - 如何使用Searchkick和Rails处理嵌套文档?

java - Elasticsearch批量索引Java API不工作

elasticsearch - Elasticsearch未分析字段

elasticsearch - Elasticsearch 分析器和 Facet

elasticsearch - Elasticsearch 中的分片和副本

elasticsearch - 如何从其他网络访问 Elasticsearch? <我的静态公网IP地址> :9200

java - 我正在尝试将json文件推送到elasticsearch,但POST和PUT操作却出现405错误,如何解决?