弹性搜索字段之间的比较

jdi*_*517 17 elasticsearch

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

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

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

SELECT * FROM Table1 WHERE farePrice>100 AND originRegion = destinationRegion 
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*han 30

您可以使用脚本过滤器 -

{
  "filtered": {
    "query": {
      "range": {
        "farePrice": {
          "gt": 100
        }
      }
    },
    "filter": {
      "script": {
        "script": "doc['originRegion'].value ==  doc['destinationRegion'].value"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处此处找到更多信息.

  • 脚本通常是CPU密集型的. (2认同)
  • 对于ES 5.0+,您需要使用查询而不是在顶部离开时过滤,例如:""query":{"bool":{"must":{"range":...}},"filter" :...}`:/sf/ask/2836386451/ (2认同)
  • @Sam - 此操作是在文档值上完成的,而不是反向索引。所以 Lucene 中的查询没有帮助。您需要编写自定义收集器接口或其他东西的扩展并解决它 (2认同)