Exemplo n.º 1
0
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))
	}
}