示例
编辑示例
编辑本节列出了一系列常见用例,可帮助您开始使用这个新的 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。为了提供 index
、id
,然后运行查询
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())
它生成以下 JSON
{ "query": { "match": { "name": { "query": "Foo" } } } }
聚合
编辑给定具有 price
字段的文档,我们在 index_name
上运行求和聚合