【问题标题】:Elasticsearch query based on two values基于两个值的 Elasticsearch 查询
【发布时间】:2016-08-17 15:59:19
【问题描述】:

我正在尝试使用 elasticsearch 来查找具有基于两个文档属性的规则的文档。

假设文档的结构如下:

{
  "customer_payment_timestamp" : 14387930787,
  "customer_delivery_timestamp" : 14387230787,
}

我想查询这类文档并查找 customer_payment_timestamp 大于 customer_delivery_timestamp 的所有文档>.

尝试了官方文档,但我找不到任何关于查询本身或预映射字段的相关示例......甚至可能吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以像这样使用script filter 来实现这一点:

    POST index/_search
    {
      "query": {
        "bool": {
          "filter": {
            "script": {
              "script": "doc.customer_payment_timestamp.value > doc. customer_delivery_timestamp.value"
            }
          }
        }
      }
    }
    

    注意:您需要确保dynamic scripting is enabled

    【讨论】:

    • 谢谢。使用它时出现以下错误:“原因”:{“类型”:“script_exception”,“原因”:“类型[内联],操作[搜索]和语言[groovy]的脚本被禁用”}
    • 确实...谢谢!我猜动态脚本会影响性能,对吧?
    • 是的,它做了一点点。在您的情况下,您可能应该在索引时创建另一个包含该条件的布尔字段 payment_after_delivery,然后您将能够使用非常简单的 term 查询来查询该新字段
    • 这么想,是否可以只使用映射文件,还是应该污染我的实体?
    • 您不必将此视为“污染”,它只是帮助您搜索实体。为加快搜索速度而索引大量“帮助”字段的情况并不少见。
    猜你喜欢
    • 2018-11-14
    • 2014-10-31
    • 2015-01-30
    • 1970-01-01
    • 2017-02-17
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多