This commit is contained in:
Marin Bek 2016-09-09 15:43:50 +00:00 committed by GitHub
commit 07e75d5ca0
3 changed files with 123 additions and 0 deletions

66
goes.go
View File

@ -309,6 +309,10 @@ func (c *Connection) Get(index string, documentType string, id string, extraArgs
// The extraArgs is a list of url.Values that you can send to elasticsearch as
// URL arguments, for example, to control routing, ttl, version, op_type, etc.
func (c *Connection) Index(d Document, extraArgs url.Values) (*Response, error) {
if parent, ok := d.Parent.(string); ok {
extraArgs.Set("parent", parent)
}
r := Request{
Conn: c,
Query: d.Fields,
@ -601,3 +605,65 @@ func (c *Connection) AliasExists(alias string) (bool, error) {
return resp.Status == 200, err
}
// CloseIndex closes an index represented by a name
func (c *Connection) CloseIndex(name string) (*Response, error) {
r := Request{
Conn: c,
IndexList: []string{name},
method: "POST",
api: "_close",
}
return r.Run()
}
// OpenIndex opens an index represented by a name
func (c *Connection) OpenIndex(name string) (*Response, error) {
r := Request{
Conn: c,
IndexList: []string{name},
method: "POST",
api: "_open",
}
return r.Run()
}
func (c *Connection) GetAliases(indexes []string) (*Response, error) {
r := Request{
Conn: c,
IndexList: indexes,
method: "GET",
api: "_alias/",
}
return r.Run()
}
func (c *Connection) ReplaceIndexInAlias(alias string, old_index string, new_index string) (*Response, error) {
command := map[string]interface{}{
"actions": make([]map[string]interface{}, 1),
}
command["actions"] = append(command["actions"].([]map[string]interface{}), map[string]interface{}{
"remove": map[string]interface{}{
"index": old_index,
"alias": alias,
},
"add": map[string]interface{}{
"index": new_index,
"alias": alias,
},
})
r := Request{
Conn: c,
Query: command,
method: "POST",
api: "_aliases",
}
return r.Run()
}

View File

@ -1424,3 +1424,59 @@ func (s *GoesTestSuite) TestAliasExists(c *C) {
exists, err = conn.AliasExists(alias)
c.Assert(exists, Equals, true)
}
func (s *GoesTestSuite) TestIndexWithChild(c *C) {
indexName := "testindexwithchild"
docType := "tweet"
conn := NewConnection(ES_HOST, ES_PORT)
// just in case
conn.DeleteIndex(indexName)
_, err := conn.CreateIndex(indexName, map[string]interface{}{})
c.Assert(err, IsNil)
//defer conn.DeleteIndex(indexName)
authorDoc := Document{
Index: indexName,
Type: "author",
Fields: map[string]interface{}{
"name": "An Author",
},
Id: "aut",
}
response, err := conn.Index(authorDoc, url.Values{})
c.Assert(err, IsNil)
mapping := map[string]interface{}{
"tweet": map[string]interface{}{
"properties": map[string]interface{}{
"count": map[string]interface{}{
"type": "integer",
"index": "not_analyzed",
"store": true,
},
},
"_parent": map[string]interface{}{
"type": "author",
},
},
}
response, err = conn.PutMapping("tweet", mapping, []string{indexName})
c.Assert(err, IsNil)
c.Assert(response.Acknowledged, Equals, true)
c.Assert(response.TimedOut, Equals, false)
d := Document{
Index: indexName,
Type: docType,
Fields: map[string]interface{}{
"count": 5,
},
Parent: "aut",
}
response, err = conn.Index(d, url.Values{})
c.Assert(err, IsNil)
}

View File

@ -107,6 +107,7 @@ type Document struct {
Id interface{}
BulkCommand string
Fields interface{}
Parent interface{}
}
// Represents the "items" field in a _bulk response