func (suite *EsTester) Test04JsonOperations() { t := suite.T() assert := assert.New(t) var tmp1, tmp2 Obj var err error var src *json.RawMessage var searchResult *elasticsearch.SearchResult esi := suite.SetUpIndex() assert.NotNil(esi) defer closer(t, esi) // SEARCH for everything { str := `{ "query": { "match_all": {} } }` searchResult, err = esi.SearchByJSON(objType, str) assert.NoError(err) assert.NotNil(searchResult) for _, hit := range *searchResult.GetHits() { err = json.Unmarshal(*hit.Source, &tmp1) assert.NoError(err) } assert.EqualValues(3, searchResult.TotalHits()) } // SEARCH for a specific one { str := `{ "query": { "term": {"id":"id1"} } }` searchResult, err = esi.SearchByJSON(objType, str) assert.NoError(err) assert.NotNil(searchResult) assert.EqualValues(1, searchResult.TotalHits()) src = searchResult.GetHit(0).Source assert.NotNil(src) err = json.Unmarshal(*src, &tmp1) assert.NoError(err) assert.EqualValues("data1", tmp1.Data) } // SEARCH fuzzily { str := `{ "query": { "term": {"tags":"foo"} } }` searchResult, err = esi.SearchByJSON(objType, str) assert.NoError(err) assert.NotNil(searchResult) assert.EqualValues(2, searchResult.TotalHits()) hit0 := searchResult.GetHit(0) assert.NotNil(hit0) src = hit0.Source assert.NotNil(src) err = json.Unmarshal(*src, &tmp1) assert.NoError(err) hit1 := searchResult.GetHit(1) assert.NotNil(hit1) src = hit1.Source assert.NotNil(src) err = json.Unmarshal(*src, &tmp2) assert.NoError(err) ok1 := ("id0" == tmp1.ID && "id2" == tmp2.ID) ok2 := ("id0" == tmp2.ID && "id2" == tmp1.ID) assert.True((ok1 || ok2) && !(ok1 && ok2)) } }