java - 如何在 dsl 查询/java 高级休息客户端查询中包含 kql

标签 java elasticsearch dsl elasticsearch-dsl

例如,有没有办法将 KQL(接近语法)包含到 DSL bool 查询中。我有一个聚合,其存储桶构成一个数据集,该数据集被“展平”为 TableView 。在 UI 中,我们允许 KQL 过滤,但根据给定的操作,我会获取一行中包含的数据集,以用作 boolean 查询 WHERE 子句之类的值,以获取我们包含在该集中的文档实例。

因此,我构建了一个 boolean 查询,该查询非常好并且可以从这些属性中正常工作:

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

但我还获得了用户用于在 UI 中过滤数据集的 KQL 字符串 item.available: true

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

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

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

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

最佳答案

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

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

关于java - 如何在 dsl 查询/java 高级休息客户端查询中包含 kql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157206/

相关文章:

c# - 如何将特定的Elasticsearch DSL查询转换为嵌套查询?

java - 使用 byte-buddy 进行 Java 级别的仪器

elasticsearch - Elasticsearch是否适合作为最终存储解决方案?

php - laravel 6 + elasticsearch-php 7.6 + xampp : No alive nodes found in your cluster

elasticsearch - 从基于Elasticsearch中2个不同字段的值进行聚合

scala - Akka-http中获取客户端IP

compiler-construction - 构建有效的外部 DSL

java - 为什么@SafeVarargs 不抑制警告?

java - 在屏幕上绘图 - Java

java - 使用 SOAP Web 服务的消费者驱动契约(Contract)