[Go 开源推荐] esquery —— 语法简单的 Elasticsearch 请求库

介绍

https://github.com/aquasecurity/esquery

esquery 减少了使用嵌套极为紧密的映射(map[string]interface{})和手动将查询序列化为 JSON 的需要。由于所有内容都是静态类型,因此它还有助于消除常见错误,例如查询类型拼写错误。

使用 esquery 可以使您的代码更易于编写、读取和维护,并显著减少您编写的代码量。想知道你能节省多少代码吗?检查一下这个项目的测试。

安装

esquery 是一个 Go 模块。要安装它,只需要在项目的根目录中运行此命令:

go get github.com/aquasecurity/esquery

使用说明

esquery 提供了一种方法链接样式的 API,用于构建、执行查询和聚合。它不封装正式的 Go 客户端,也不要求您更改现有代码来集成这个库。可以使用 esquery 直接构建查询,并通过传递 * elasticsearch.Client 实例(带有可选搜索参数)来执行查询。结果从官方客户端按原样返回(例如 * esapi.Response 对象)。

入门非常简单:

package main

import (
    "context"
    "log"

    "github.com/aquasecurity/esquery"
    "github.com/elastic/go-elasticsearch/v7"
)

func main() {
    // 连接到 ElasticSearch 实例
    es, err := elasticsearch.NewDefaultClient()
    if err != nil {
        log.Fatalf("Failed creating client: %s", err)
    }

    // 运行布尔搜索查询
    qRes, err := esquery.Query(
        esquery.
            Bool().
            Must(esquery.Term("title", "Go and Stuff")).
            Filter(esquery.Term("tag", "tech")),
    ).Run(
        es, 
        es.Search.WithContext(context.TODO()),
        es.Search.WithIndex("test"),
    )
    if err != nil {
        log.Fatalf("Failed searching for stuff: %s", err)
    }

    defer qRes.Body.Close()

    // 运行聚合
    aRes, err := esquery.Aggregate(
        esquery.Avg("average_score", "score"),
        esquery.Max("max_score", "score"),
    ).Run(
        es,
        es.Search.WithContext(context.TODO()),
        es.Search.WithIndex("test"),
    )
    if err != nil {
        log.Fatalf("Failed searching for stuff: %s", err)
    }

    defer aRes.Body.Close()

    // ...
}

特征

支持的查询

当前支持以下查询:

ElasticSearch DSL esquery Function
"match" Match()
"match_bool_prefix" MatchBoolPrefix()
"match_phrase" MatchPhrase()
"match_phrase_prefix" MatchPhrasePrefix()
"match_all" MatchAll()
"match_none" MatchNone()
"exists" Exists()
"fuzzy" Fuzzy()
"ids" IDs()
"prefix" Prefix()
"range" Range()
"regexp" Regexp()
"term" Term()
"terms" Terms()
"terms_set" TermsSet()
"wildcard" Wildcard()
"bool" Bool()
"boosting" Boosting()
"constant_score" ConstantScore()
"dis_max" DisMax()

支持的聚合

当前支持以下聚合:

ElasticSearch DSL esquery Function
"avg" Avg()
"weighted_avg" WeightedAvg()
"cardinality" Cardinality()
"max" Max()
"min" Min()
"sum" Sum()
"value_count" ValueCount()
"percentiles" Percentiles()
"stats" Stats()
"string_stats" StringStats()
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://github.com/aquasecurity/esquery

译文地址:https://learnku.com/go/t/41359

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!