示例编辑

本节列举了一系列常见用例,可帮助您开始使用此新 API。

这部分内容仍在开发中,文档将在未来进行更新。

创建索引编辑

在本例中,我们将创建一个名为 test-index 的索引,并为 price 字段提供一个映射,该字段将是一个整数。请注意,使用 IntegerNumberProperty 的构建器将如何自动为 type 字段应用正确的值。

res, err := es.Indices.Create("test-index").
    Request(&create.Request{
        Mappings: &types.TypeMapping{
            Properties: map[string]types.Property{
                "price": types.NewIntegerNumberProperty(),
            },
        },
    }).
    Do(nil)

索引文档编辑

索引文档的标准方法是向 Request 方法提供一个 struct,标准的 json/encoder 将在您的结构上运行,并将结果发送到 Elasticsearch。

document := struct {
    Id    int    `json:"id"`
    Name  string `json:"name"`
    Price int    `json:"price"`
}{
    Id:    1,
    Name:  "Foo",
    Price: 10,
}

res, err := es.Index("index_name").
    Request(document).
    Do(context.Background())

或者,您可以使用 Raw 方法并提供已序列化的 JSON

res, err := es.Index("index_name").
			Raw([]byte(`{
			  "id": 1,
			  "name": "Foo",
			  "price": 10
			}`)).Do(context.Background())

检索文档编辑

检索文档遵循 API 作为端点参数的一部分。按顺序提供 indexid,然后运行查询

res, err := es.Get("index_name", "doc_id").Do(context.Background())

检查文档是否存在编辑

如果您不想检索文档的内容,只想检查它是否存在于您的索引中,我们提供了 IsSuccess 快捷方式

if exists, err := es.Exists("index_name", "doc_id").IsSuccess(nil); exists {
    // The document exists !
} else if err != nil {
   // Handle error.
}

如果一切顺利,结果为 true,如果文档不存在,则为 false。如果在请求期间发生错误,您将获得 false 和相关错误。

搜索编辑

可以使用结构体或构建器构建搜索查询。例如,让我们在名为 index_name 的索引中搜索 name 字段值为 Foo 的文档。

使用结构体请求

res, err := es.Search().
    Index("index_name"). 
    Request(&search.Request{ 
        Query: &types.Query{
            Match: map[string]types.MatchQuery{
                "name": {Query: "Foo"}, 
            },
        },
    }).Do(context.Background()) 

此搜索的目标索引。

搜索的请求部分。

匹配查询指定 name 应匹配 Foo

使用 context.Background 运行查询并返回响应。

它生成以下 JSON

{
  "query": {
    "match": {
      "name": {
        "query": "Foo"
      }
    }
  }
}

聚合编辑

给定具有 price 字段的文档,我们对 index_name 运行求和聚合

totalPricesAgg, err := es.Search().
    Index("index_name"). 
    Request(
        &search.Request{
            Size: some.Int(0), 
            Aggregations: map[string]types.Aggregations{
                "total_prices": { 
                    Sum: &types.SumAggregation{
                        Field: some.String("price"), 
                    },
                },
            },
        },
    ).Do(context.Background())

指定索引名称。

将大小设置为 0 以仅检索聚合的结果。

指定运行求和聚合的字段名称。

SumAggregationAggregations 映射的一部分。