使用 Elasticsearch 查询 DSL 进行过滤

编辑

使用 Elasticsearch 查询 DSL 进行过滤编辑

可以通过在 filter 参数中指定查询,使用标准 Elasticsearch 查询 DSL 过滤 SQL 将运行的结果。

response = client.sql.query(
  format: 'txt',
  body: {
    query: 'SELECT * FROM library ORDER BY page_count DESC',
    filter: {
      range: {
        page_count: {
          gte: 100,
          lte: 200
        }
      }
    },
    fetch_size: 5
  }
)
puts response
POST /_sql?format=txt
{
  "query": "SELECT * FROM library ORDER BY page_count DESC",
  "filter": {
    "range": {
      "page_count": {
        "gte" : 100,
        "lte" : 200
      }
    }
  },
  "fetch_size": 5
}

返回

    author     |                name                |  page_count   | release_date
---------------+------------------------------------+---------------+------------------------
Douglas Adams  |The Hitchhiker's Guide to the Galaxy|180            |1979-10-12T00:00:00.000Z

标准查询 DSL 过滤的一个有用且不太明显的用法是通过特定的 路由键 搜索文档。 由于 Elasticsearch SQL 不支持 routing 参数,因此可以指定 _routing 字段的 terms 过滤器 来代替

response = client.sql.query(
  format: 'txt',
  body: {
    query: 'SELECT * FROM library',
    filter: {
      terms: {
        _routing: [
          'abc'
        ]
      }
    }
  }
)
puts response
POST /_sql?format=txt
{
  "query": "SELECT * FROM library",
  "filter": {
    "terms": {
      "_routing": ["abc"]
    }
  }
}