代码之家  ›  专栏  ›  技术社区  ›  khateeb

如何进行Elasticsearch ESQL Distinct查询?

  •  0
  • khateeb  · 技术社区  · 11 月前

    在SQL中:

    select distinct(session_id) from my_table where userid = '20';
    

    我在ESQL中拥有的内容:

    from my_table | where userid == 20
    

    我应该在下一个管道中添加什么,以便它从表中返回唯一的会话ID? This 是指向ESQL文档的链接。要使用哪个处理命令?

    1 回复  |  直到 11 月前
        1
  •  0
  •   Musab Dogan    11 月前

    您可以添加 STATS count(*) BY session_id 对于 distinct(session_id) .

    #Push the sample data
    POST /my_table/_bulk
    { "index": { "_index": "my_table", "_id": "1" } }
    { "session_id": 1, "userid": 20, "other_column": "data1" }
    { "index": { "_index": "my_table", "_id": "2" } }
    { "session_id": 2, "userid": 20, "other_column": "data2" }
    { "index": { "_index": "my_table", "_id": "3" } }
    { "session_id": 1, "userid": 20, "other_column": "data3" }
    { "index": { "_index": "my_table", "_id": "4" } }
    { "session_id": 3, "userid": 30, "other_column": "data4" }
    { "index": { "_index": "my_table", "_id": "5" } }
    { "session_id": 4, "userid": 20, "other_column": "data5" }
    { "index": { "_index": "my_table", "_id": "6" } }
    { "session_id": 2, "userid": 20, "other_column": "data6" }
    

    #with DSL query
    POST /my_table/_search
    {
      "size":0,
      "query":{"term":{"userid":20}},
      "aggs":{"unique_session_ids":{"terms":{"field":"session_id"}}}
    }
    

    #with ESQL query
    POST /_query?format=txt
    {
      "query": " FROM my_table | WHERE userid == 20 | STATS count(*) BY session_id "
    }
    

    enter image description here

    参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-rest.html#esql-rest-params