public IDictionary <Restaurant, List <MenuItem> > SearchRestaurants(string searchText) { var menuItemDocs = _fullTextSearchEngine.SearchMenuItems(searchText); var menuItemsGrouped = menuItemDocs.GroupBy(key => Int32.Parse(key.Get("RestaurantId")), element => new { MenuItemId = Int32.Parse(element.Get("MenuItemId")), CategoryName = element.Get("CategoryName") }); var restaurants = _dataProvider.GetRestaurants() .Where(x => menuItemsGrouped.Any(group => group.Key == x.Id)); var menuItems = _dataProvider.GetMenuItems(); var categories = _dataProvider.GetCategories(); var result = menuItemsGrouped.ToDictionary(key => restaurants.First(x => x.Id == key.Key), value => { var items = menuItems.Where(mi => value.Any(x => x.MenuItemId == mi.Id)).ToList(); foreach (MenuItem menuItem in items) { var item = value.First(v => v.MenuItemId == menuItem.Id); menuItem.Category = categories.FirstOrDefault(c => c.Name == item.CategoryName); } return(items); }); return(result); }
private async Task CreateFtsIndexesAsync() { var data = _searchDataProvider.GetRestaurants().ToList(); _ftsEngine.IndexMenuItems(data); _ftsEngine.IndexCategories(data); }