# Iterate over searchResponse

**URL:** <https://discuss.elastic.co/t/iterate-over-searchresponse/291648>\
**Category:** Elasticsearch\
**Created:** [December 13, 2021, 12:27pm UTC](https://discuss.elastic.co/t/iterate-over-searchresponse/291648 "2021-12-13T12:27:48Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Katgust](https://avatars.discourse-cdn.com/v4/letter/k/c4cdca/32.png) [@Katgust](https://discuss.elastic.co/u/Katgust)\
**Post date:** [December 13, 2021, 12:27pm UTC](https://discuss.elastic.co/t/iterate-over-searchresponse/291648/1 "2021-12-13T12:27:48Z")

</div>

I'd like to iterate over my searchResponse so I can use the value from an id field in every found document in order to do a new search where this id matches another one in another index.

So first I'm doing this

```auto
    var groupSearch = await EsClient().SearchAsync<GroupDto>(s => s
        .Query(q => q
            .Match(m => m
                .Field(f => f.GroupId)
                .Field(f => f.GroupName))
        ));

```

and then I'd like to do something like this

```auto
    SimpleUnitDto unit;
    GroupDto group = (GroupDto)groupSearch;
    group.Units = new List<SimpleUnitDto>();

foreach (Guid groupId in groupSearch.Hits.Select(g => g.Source.GroupId))
{
    var unitSearch = await EsClient().SearchAsync<SimpleUnitDto>(s => s
        .Index("units")
        .Query(q => q
            .MultiMatch(m => m
                .Fields(f => f
                    .Field(ff => ff.UnitId)
                    .Field(ff => ff.UnitName))
            ) && +q
            .Term(t => t
                .Field("groupid")
                .Value(groupId)
        ));

    unit = (SimpleUnitDto)unitSearch;
    group.Units.Add(unit);
    group = groupDict[groupId];
}

return groupDict.Values

```

This is not a working example but it's how i think it should work.  
Could anyone assist?

---

<div class="post-metadata">

**Author:** ![Katgust](https://avatars.discourse-cdn.com/v4/letter/k/c4cdca/32.png) [@Katgust](https://discuss.elastic.co/u/Katgust)\
**Post date:** [December 14, 2021, 10:06am UTC](https://discuss.elastic.co/t/iterate-over-searchresponse/291648/2 "2021-12-14T10:06:20Z")

</div>

Today I'm trying out MultiSearchAsync like this

```auto
var multiSearch = await EsClient().MultiSearchAsync("*", m => m
    .Search<GroupDto>(s => s
        .AllIndices()
        .Query(q => q
            .Term(t => t
                .Field(f => f.GroupId)
                .Field(f => f.GroupName)
            ) && +q
            .Term(t => t
                .Field("_index")
                .Value("groups")
            )))
    .Search<SimpleUnitDto>(s => s
        .AllIndices()
        .Query(q => q
            .Term(t => t
                .Field(f => f.UnitId)
                .Field(f => f.UnitName)
            ) && +q
            .Term(t => t
                .Field("_index")
                .Value("units")
            )
    )));

```

Which could be cool if it worked but I still can't figure out a better solution than something like a foreach to iterate over the search response. Unfortunately I can't find much relevant documentation for the multi search api for .net / nest.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 11, 2022, 10:06am UTC](https://discuss.elastic.co/t/iterate-over-searchresponse/291648/3 "2022-01-11T10:06:57Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
