// Fast? Full Text Search
        public List <SongMap> Search(string SearchKey)
        {
            if (!DatabaseImported && RequestBotConfig.Instance.LocalSearch)
            {
                this.LoadCustomSongs().Await(null, null, null);
            }

            var result = new List <SongMap>();

            if (this.Bot.GetBeatSaverId(SearchKey) != "")
            {
                if (MapDatabase.MapLibrary.TryGetValue(this.normalize.RemoveSymbols(ref SearchKey, this.normalize._SymbolsNoDash), out var song))
                {
                    result.Add(song);
                    return(result);
                }
            }

            var resultlist = new List <HashSet <int> >();

            var SearchParts = this.normalize.Split(SearchKey);

            foreach (var part in SearchParts)
            {
                if (!SearchDictionary.TryGetValue(part, out var idset))
                {
                    return(result); // Keyword must be found
                }
                resultlist.Add(idset);
            }

            // We now have n lists of candidates

            resultlist.Sort((L1, L2) => L1.Count.CompareTo(L2.Count));

            // We now have an optimized query

            // Compute all matches
            foreach (var map in resultlist[0])
            {
                for (var i = 1; i < resultlist.Count; i++)
                {
                    if (!resultlist[i].Contains(map))
                    {
                        goto next; // We can't continue from here :(
                    }
                }


                try {
                    result.Add(MapDatabase.MapLibrary[map.ToString("x")]);
                }
                catch {
                    this._chatManager.QueueChatMessage($"map fail = {map}");
                }

next:
                ;
            }

            return(result);
        }