当前位置: 首页 > 知识库问答 >
问题:

如何在elasticsearch上比较小时

冯元魁
2023-03-14

我试图在elasticsearch查询中使用无痛语言来比较小时数。我想问一下这样的问题:

{  
   "script":"doc['schedule.from_time'] >= doc['schedule.to_time']"
}

但我有错误:

无法应用 [

嵌套文档的方案是:

{
    "settings": {
        "index.mapping.total_fields.limit": 10000
    },
    "mappings": {
        "_doc": {
           "dynamic_templates": [{
                "integers": {
                    "match_mapping_type": "long",
                    "mapping": {
                        "type": "long",
                        "index": false
                    }
                }
            }],
            "properties": {
                "enabled_services": {
                    "type": "nested",
                    "properties": {
                        "service_id": {
                           "type": "text",
                           "analyzer": "whitespace",
                           "search_analyzer": "whitespace"
                        },
                        "available_day_of_week": {
                            "type": "long"
                        },
                        "available_from_time": {
                            "type": "date",
                            "format": "hour_minute"
                        },
                        "available_to_time": {
                            "type": "date",
                            "format": "hour_minute"
                        }
                    }
                }
            }
        }
    }
}

(这些值的格式为“2:00”或“18:00”)。

我尝试过使用< code >。日期 或<代码>。value,但它不起作用,因为我的变量只包含小时而不是日期时间。

有人能帮帮我吗:)

共有2个答案

康锦
2023-03-14

OK我找到了答案:

{
    "script": {
        "script": "doc['enabled_services.available_from_time'].date.isBefore(doc['enabled_services.available_to_time'].date)"
    }
}

谢谢大家!

苏阳州
2023-03-14

我认为您正在寻找:

doc['enabled_services.available_from_time'].value.isAfter(doc['enabled-services.available_ to_time'].value)

您还需要从映射中删除“类型”:“嵌套”。我认为在你的情况下不需要它。

工作代码如下:

PUT /painless-dates
{
  "settings": {
    "index.mapping.total_fields.limit": 10000
  },
  "mappings": {
    "_doc": {
      "dynamic_templates": [
        {
          "integers": {
            "match_mapping_type": "long",
            "mapping": {
              "type": "long",
              "index": false
            }
          }
        }
      ],
      "properties": {
        "enabled_services": {
          "properties": {
            "service_id": {
              "type": "text",
              "analyzer": "whitespace",
              "search_analyzer": "whitespace"
            },
            "available_day_of_week": {
              "type": "long"
            },
            "available_from_time": {
              "type": "date",
              "format": "hour_minute"
            },
            "available_to_time": {
              "type": "date",
              "format": "hour_minute"
            }
          }
        }
      }
    }
  }
}
POST /painless-dates/_doc
{
  "enabled_services": {
    "available_from_time": "02:00",
    "available_to_time": "18:00"
  }
}

POST /painless-dates/_doc
{
  "enabled_services": {
    "available_from_time": "04:00",
    "available_to_time": "03:00"
  }
}
GET /painless-dates/_search
{
  "query": {
    "bool": {
      "must": {
        "script": {
          "script": {
            "source": "doc['enabled_services.available_from_time'].value.isAfter(doc['enabled_services.available_to_time'].value)",
            "lang": "painless"
          }
        }
      }
    }
  }
}
{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "painless-dates",
        "_type": "_doc",
        "_id": "0wFw7mYBueYINcTmJsMG",
        "_score": 1,
        "_source": {
          "enabled_services": {
            "available_from_time": "04:00",
            "available_to_time": "03:00"
          }
        }
      }
    ]
  }
}
 类似资料:
  • 我有一个将unitPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一种比较价格的方法,但似乎我不能在BigDecimal数据类型中使用比较运算符。我必须更改数据类型还是有其他方法?

  • 问题内容: 假设我有3个输入:rate,sendAmount和receiveAmount。我把那3个输入放在useEffect diffing params上。规则是: 如果sendAmount更改,我计算 如果receiveAmount改变了,我计算 如果费率发生变化,我计算时间或计算时间 这是codesandbox https://codesandbox.io/s/pkl6vn7x6j来演示此

  • 问题内容: 我在数据库中有2个日期对象,它们代表公司的工作时间。 我只需要几个小时,但是因为我必须保存日期。它看起来像这样: 开始时间:12-12-2001-13:00:00完成时间:12-12-2001-18:00:00 我有公司和用户所在的时区。(我的服务器可能在另一个时区)。 我需要检查用户的当前时间(考虑他所在的时区)是否在公司工作时间之内(考虑公司所在的时区)。 我该怎么做?我用Java

  • 问题内容: 我看到可以进行日期比较,也可以进行日期比较,但是我一直在努力寻找如何检查当前时间()是否早于指定时间(例如上午8点),还是晚于指定时间(例如上午8点),而不管日期如何。 问题答案: 您 无法 将特定时间点(例如“现在”)与一个固定的重复发生的事件(每天早上8点发生)进行比较。 您可以检查是否现在之前或之后, 今天 上午8点:

  • 问题内容: 使用Linux,我想比较两个具有相同架构的SQLite数据库。只会有一些差异。 有没有可以输出这些差异的工具?最好将它们输出到命令行,以便我可以grep / sed它们。 SQLite使用SQL,因此一般的SQL工具也可以使用。 问题答案: 请查看2015年5月7日发布的SQLite版本3.8.10。此版本首次包含 sqldiff.exe 实用程序, 用于计算两个SQLite数据库文件

  • 问题内容: 我有一个函数,返回大小写混合的五个字符。如果我对此字符串进行查询,则无论大小写都将返回该值。 如何使MySQL字符串查询区分大小写? 问题答案: http://dev.mysql.com/doc/refman/5.0/en/case- sensitiveivity.html 默认字符集和排序规则为latin1和latin1_swedish_ci,因此默认情况下非二进制字符串比较不区分大