如何在 dsl query/java 高级 rest 客户端查询中包含 kql

How to include kql in dsl query/java high level rest client query

例如,有没有办法将 KQL(几乎是语法)包含到 DSL 布尔查询中。我有一个聚合,它的桶组成了一个数据集,它是 "flattened" 到 table 视图。在 UI 中,我们允许 KQL 过滤,但根据给定的操作,我得到一行中包含的数据集,用作布尔查询 WHERE 子句之类的值,用于获取我们包含在该集合中的文档实例。

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

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

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

有没有一种方法可以将其包含在我已经通过 java 高级休息客户端/或只是通用 dsl 构建的布尔查询中?

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

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

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

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

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