Elasticsearch中的COALESCE

时间:2014-12-25 17:46:45

标签: ruby-on-rails elasticsearch

我在轨道上使用带有红宝石的MongoId。对于我的搜索,我使用的是elasticsearch。

我有一个日期字段。它是可选字段,我将其用作停止日期。在我的搜索中,我想知道我的停止日期是否大于搜索停止日期。示例

{
  "range": {
    "stop_date": {
      "gt": "#{search_stop}"
    }
  }
}

当停止日期为null时的问题我需要在此查询中返回它,但它不是因为文档中的停止日期为null。

我需要在停止日期为空时或文档中没有将搜索设置为默认值,如21/31/2100。

任何建议都会非常感激......

1 个答案:

答案 0 :(得分:4)

有两种方法。

  1. 一种是在映射中使用null_value来stop_date。这条路 , 当您编制索引时,如果缺少stop_date字段,则为该值 设置为null_value将转到lucene反向索引。但问题 使用这种方法是,这个值在所有方面都是静态的 文件和acors所有时间。 Null_value - http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html
  2. 第二种方法是更改​​查询

    {
      "query": {
        "filtered": {
          "filter": {
            "or": [
              {
                "range": {
                  "stop_date": {
                    "gt": "#{search_stop}"
                  }
                }
              },
              {
                "missing": {
                  "field": "stop_date"
                }
              }
            ]
          }
        }
      }
    }
    

    如果缺少stop_date字段或何时,匹配文档 日期范围过滤器匹配。

  3. 我的建议是使用第二个。