public async Task <List <DocumentModel> > MultiSearch(IndexModel indexModel, MultiSearchModel searchModel) { var results = new List <List <DocumentModel> >(); foreach (var search in searchModel.Searches) { SetSearcher(search.Type); results.Add(await _searcher.ExecuteSearch(indexModel, search)); } List <DocumentModel> searchResult; switch (searchModel.QueryType) { case QueryType.Or: searchResult = CollectionsHelper.Union(new DocumentComparer(), results.ToArray()).ToList(); break; case QueryType.And: searchResult = CollectionsHelper.Intersect(new DocumentComparer(), results.ToArray()).ToList(); break; default: throw new ArgumentOutOfRangeException(); } return(GetSorted(searchModel, searchResult)); }