首页 > 解决方案 > 如何在 dsl 查询/java 高级别的客户端查询中包含 kql

问题描述

例如,有没有办法将 KQL(几乎是语法)包含到 DSL bool 查询中。我有一个聚合,其存储桶构成一个数据集,该数据集被“展平”为表格视图。在 UI 中,我们允许 KQL 过滤,但在给定操作后,我会获得包含在一行中的数据集,用作布尔查询 WHERE 子句,例如用于获取我们包含在该集合中的文档实例的值。

因此,我构建了一个很棒的 bool 查询,并且可以从这些属性中正常工作:

{
    "query": {
       "bool": {
          "must": [{
             "match": {
                 "color": "red"
              },{
                  "shape": "circle"
              }
          }]
       }
    }
}

但我也得到了用户用来过滤 UI item.available: true 数据集的 KQL 字符串

有没有办法将它包含在我已经通过java高级rest客户端/或者只是通用dsl构建的布尔查询中?

我已经尝试过查询字符串,因为它似乎是我能找到的文档中最接近的

{
    "query": {
       "bool": {
          "must": [{
             "match": {
                 "color": "red"
              },{
                  "shape": "circle"
              }
          }]
       },
       "query_string" : {
             "query" : "item.available: true"
        }
    }
}

但这似乎不能与 bool 查询并行工作?有任何想法吗?一如既往地感谢

标签: javaelasticsearchdslelasticsearch-dsl

解决方案


KQL 仅在 Kibana UI 中可用/公开。每当 Kibana 与 Elasticsearch 通信时,它都会使用 Elasticsearch 的查询 DSL。query-string一个值得注意的例外是 Lucene 表达式(或翻译成 Lucene 语法的 KQL 表达式) ,正如您所观察到的,它将最终作为 Elasticsearch 查询中的搜索字符串。

-queryquery-string是“标准”Elasticsearch-query,可以在任何其他查询(例如match-query)可以使用的地方使用。所以是的,应该可以在query-string-query 中使用bool-query,在使用语言客户端时也是如此。


推荐阅读