[Go 开源推荐] esquery —— 语法简单的 Elasticsearch 请求库
介绍
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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: