go-gin es查询使用多条件与聚合

es查询 term 与 match

es查询 must 与 should

  • must的两个条件都必须满足
  • should中的两个条件至少满足一个就可以
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GET /dns_cache_ms_log_queue_2019*/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"Data.Tid.keyword": "445f395f647c1b36"
}
},
{
"term": {
"Host.keyword": "p53577v.hulk.shbt.qihoo.net_001"
}
}
]
}
}
}

es 使用排序字段的问题

1
2
3
4
// 参与排序的字段类型不明确 CreateTime [未映射类型字段]
client.Sort("CreateTime", false)
// 替换为默认时间字段
client.Sort("@timestamp", false)

olivere/elastic 使用

  • NewBoolQuery 多条件查询器
  • q.Must / q.Should 添加查询器
  • 其他查询器 NewTermQuery NewMatchQuery …
  • 分页 From(OFFSET) / Size(PAGESIZ)
  • 排序 Sort(FIELD,DESC_BOOL)
1
2
3
4
5
6
7
8
9
10
11
12
13
client := GetEsClient().Search().Index("dns_cache_ms_log_queue_20*")
boolQuery := elastic.NewBoolQuery()

termQuery := elastic.NewTermQuery("Data.Tid.keyword", tid)
termQueryHost := elastic.NewTermQuery("Host.keyword", host)
boolQuery.Must(termQuery)
boolQuery.Must(termQueryHost)
client = client.Query(boolQuery)
PrintDSL(boolQuery) // 打印查询器生成的 json 数据
searchResult, err := client.From(page*ES_PAGE_SIZE).Size(ES_PAGE_SIZE).Sort("@timestamp", false).
Pretty(true). // 查询结果返回可读性较好的JSON格式
Do(context.Background())
fmt.Printf("查询消耗时间 %d ms, 结果总数: %d\n", searchResult.TookInMillis, searchResult.TotalHits())

聚合查询

  • s