elastic-Error all shards failed

第一次尝试使用 elastics的go sdk “github.com/olivere/elastic” ,有go版本的真不错,

不料却报错了

1
panic: elastic: Error 400 (Bad Request): all shards failed [type=search_phase_execution_exception]

上代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"context"
"elastic-analysis-go/es"
"fmt"
"github.com/olivere/elastic"
)
var (
IndexName = "openstack_error_logs"
)
func main(){
ctx := context.Background()
_ = es.CreateClient("http://10.224.144.15:9011", "USERNAME", "PASSWORD")
//create terms agg order by openstack region
aggs := elastic.NewValueCountAggregation().Field("programname")

searchResult,err := es.EsClient.Search().
Index(IndexName).
Query(elastic.NewMatchAllQuery()). // 设置查询条件
Aggregation("total", aggs). // 设置聚合条件,并为聚合条件设置一个名字
Size(0).
Do(ctx)
if err != nil {
panic(err)
}
// 使用ValueCount函数和前面定义的聚合条件名称,查询结果
agg, found := searchResult.Aggregations.ValueCount("total")
if found {
// 打印结果,注意:这里使用的是取值运算符
fmt.Println(*agg.Value)
}
}


原因分析:

当使用到Field 精准匹配相关的查询时,所以查询的关键字在es上的类型,必须是keyword而不能是text,比如你的搜索条件是 ”programname”:”neutron”,那么该programname 字段的es类型得是keyword,而不能是text
改成使用 elastic.NewValueCountAggregation().Field(“programname.keyword”) 就可以了