例如,有没有办法将 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/