ruby-on-rails - Elasticsearch中的COALESCE

标签 ruby-on-rails elasticsearch

我正在将MongoId与 ruby 配合使用。对于我的搜索,我正在使用elasticsearch。

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

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

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

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

任何建议将不胜感激...

最佳答案

有两种方法。

  • 一种方法是在映射中使用null_value到stop_date。这条路 ,
    索引时,如果缺少stop_date字段,则该值
    设置为null_value将转到lucene反向索引。但是问题
    这种方法是,该值在所有范围内都是静态的
    记录和记录所有时间。空值-
    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-core-types.html
  • 第二种方法是更改​​查询
    {
      "query": {
        "filtered": {
          "filter": {
            "or": [
              {
                "range": {
                  "stop_date": {
                    "gt": "#{search_stop}"
                  }
                }
              },
              {
                "missing": {
                  "field": "stop_date"
                }
              }
            ]
          }
        }
      }
    }
    

    如果缺少stop_date字段,或者当
    日期范围过滤器匹配。

  • 我的建议是使用第二个。

    关于ruby-on-rails - Elasticsearch中的COALESCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649477/

    相关文章:

    ruby-on-rails - 如何在Rails控制台中通过脚本测试SQLite数据库?

    ruby-on-rails - CSS、HTML : How can i make the div or <p> width dynamic as the text line increses/decreses

    ruby-on-rails - 将 foreman 与多个 .env 文件一起使用

    ruby-on-rails - Rspec 将 sql 记录到控制台以过滤/标记规范

    elasticsearch - 在elasticsearch 7.3.2中的fs中创建快照时出错?

    每个索引的 ElasticSearch 聚合

    ruby-on-rails - 改革 gem : use one model for multiple forms

    elasticsearch - 将Google Cloud Datastore与ElasticSearch同步

    ruby-on-rails - 如何从Tire gem的搜索结果中删除_source以进行Elasticsearch

    elasticsearch - 我们如何在yii2项目中集成Elastic search