如何为或条件创建弹性搜索查询

时间:2019-07-10 09:42:33

标签: elasticsearch

我想在Java中创建一个弹性查询。

查询是

从表名中选择*(col1 == 1 && col2 == 2)|| (col3 == 3 && col4 == 4);

2 个答案:

答案 0 :(得分:0)

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

弹性搜索查询中的“应该”和“必须”的组合将使您找到所需的内容。

必须

该子句(查询)必须出现在匹配的文档中,并将有助于得分。

过滤器

子句(查询)必须出现在匹配的文档中。但是与查询分数不同的是,忽略该分数。 Filter子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。

应该

子句(查询)应出现在匹配的文档中。

不得

子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。因为忽略了计分,所以所有文档的分数都将返回0。

答案 1 :(得分:0)

如果要以sql样式进行查询并将结果作为JSON对象返回,则可以使用弹性搜索查询。 请求示例:

POST _sql?format=json
{
  "query": """select "host.name", avg("system.fsstat.total_size.used")/avg(system.fsstat.total_size.total) * 100 as used_percent from "metricbeat*" where "@timestamp" >= NOW() - INTERVAL 60 MINUTE group by host.name"""
}

链接:https://www.elastic.co/what-is/elasticsearch-sql