【问题标题】:elasticsearch comparison between fields字段之间的elasticsearch比较
【发布时间】:2015-02-26 19:18:49
【问题描述】:

假设我有包含以下字段的文档: {field1, field2, ... fieldn}

我需要运行一些查询,其中某些条件需要在两个或多个字段之间进行比较。喜欢fieldX = fieldY

在标准 SQL 中,示例可能是:

SELECT * FROM Table1 WHERE farePrice>100 AND originRegion = destinationRegion 

我一直在阅读一些文档,看起来“脚本”可能是实现这一目标的唯一方法?或者还有其他选择吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以使用脚本过滤器 -

    {
      "filtered": {
        "query": {
          "range": {
            "farePrice": {
              "gt": 100
            }
          }
        },
        "filter": {
          "script": {
            "script": "doc['originRegion'].value ==  doc['destinationRegion'].value"
          }
        }
      }
    }
    

    您可以在herehere 找到更多信息。

    【讨论】:

    • 非常感谢,这行得通。我认为脚本是比较它们之间的字段的唯一方法。编写脚本对性能有负面影响吗?
    • 脚本通常是 CPU 密集型的。
    • 对于 ES 5.0+,你需要使用查询而不是在顶部过滤,例如:"query":{"bool":{"must": {"range":...}},"filter":...}:stackoverflow.com/questions/40519806/…
    • 你将如何使用 lucene 语法来做到这一点?
    • @Sam - 此操作是在 doc 值上完成的,而不是反向索引。所以在 Lucene 中的查询不会有帮助。您将需要为自定义收集器接口或其他东西编写扩展并解决它
    猜你喜欢
    • 2018-12-03
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2010-12-11
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多