【问题标题】:ElasticSearch Sql aggregation query bugs with SUM function使用 SUM 函数的 ElasticSearch Sql 聚合查询错误
【发布时间】:2019-09-25 19:43:48
【问题描述】:

Sql 查询是 EL 7.3 提供的一个非常棒的工具。但是我无法解释那个错误:

当我将 SUM 与 Match 1 条件一起使用时,下面的查询效果很好

POST _xpack/sql?format=txt
{
"query":"SELECT SUM(FlightTimeHour) Avg_Flight_Time FROM flights where MATCH(OriginCountry,'AE') "
}

但如果我使用 2 个或更多条件,则下面的 SUM 和 MATCH 查询将失败:

POST _xpack/sql?format=txt
{
"query":"SELECT SUM(FlightTimeHour) Avg_Flight_Time FROM flights where MATCH(OriginCountry,'AE') OR MATCH(OriginCountry,'FR') "
}

谁能告诉我怎么了?

【问题讨论】:

    标签: sql elasticsearch xpack


    【解决方案1】:

    SQL 文档没有提到 MATCH 上的布尔运算符。我认为它不受支持。

    您可以执行上述搜索如下 1.全文搜索使用query代替Match

    "query": "SELECT SUM(FlightTimeHour) Avg_Flight_Time FROM flights where  QUERY('OriginCountry: AE OR OriginCountry: FR')"
    
    1. 对关键字执行搜索
    "query": "SELECT SUM(FlightTimeHour) Avg_Flight_Time FROM flights where OriginCountry.keyword='AE' OR OriginCountry.keyword='FR'"
    

    编辑:以上查询为弹性搜索

    GET fonds/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "multi_match": {
                "query": "bordeaux",
                "fields": [
                  "IDEE",
                  "SLOGAN",
                  "NOM",
                  "ADRESSE",
                  "VILLE",
                  "ACTIVITE1",
                  "ACTIVITE2",
                  "KEYWORDS",
                  "KEYWORDS_SITE",
                  "SITE_H1_H6",
                  "DESCRIPTION",
                  "DESCRIPTION_SITE",
                  "ACTIVITE3",
                  "BUSINESS_MODEL",
                  "COLORS"
                ]
              }
            },
            {
              "range": {
                "FONDS_LEVEES_TOTAL": {
                  "gt": 0
                }
              } 
            },
            {
              "script": {
                "script": "doc['COMPE_RESULTAT_CA_2000'].value + doc['COMPE_RESULTAT_CA_2001'].value>0"
              }
            }
          ]
        }
      },
      "aggs": {
        "SUM": {
          "sum": {
            "field": "FONDS_LEVEES_TOTAL"
          }
        }
      }
    }
    

    【讨论】:

    • 感谢选项 1 效果很好,但它无法组合,例如 QUERY('fieldname1: value1 OR fieldname2: value2 ) AND YEAR_CREATION>2010
    • "query": "SELECT SUM(FlightTimeHour) Avg_Flight_Time FROM flight where QUERY('(OriginCountry: AE OR OriginCountry: FR) AND YEAR_CREATION:>2010')" --- 你需要添加年份在查询中创建并查找 :> 语法
    • elastic.co/guide/en/elasticsearch/reference/current/… 有几个使用查询的例子。查询和匹配都用于全文搜索,因此如果您不需要部分匹配等,您可以避免复杂性并使用选项 2
    • 谢谢,但问题是我必须将 QUERY('(OriginCountry: AE OR OriginCountry: FR) AND YEAR_CREATION>2010')" 与聚合结合起来,并且无法使其工作。@987654325 @ SELECT SUM(*) FROM INDEX WHERE QUERY('(OriginCountry: AE OR OriginCountry: FR) AND YEAR_CREATION>2010')
    • QUERY('(OriginCountry: AE OR OriginCountry: FR) AND YEAR_CREATION:>2010')" (works) 等价于 OriginCountry: AE OR OriginCountry: FR) AND YEAR_CREATION>2010')。可以请详细说明它对您不起作用的原因
    猜你喜欢
    • 2011-09-27
    • 2014-02-10
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多