public override List <SearcherItem> Search(string query, out float localMaxScore)
        {
            localMaxScore = 0;
            if (!string.IsNullOrEmpty(query))
            {
                var filter = FilterUtility.CreateAddComponentFilter(query);

                MatchFilter = (s, item) =>
                {
                    if (!(item is TypeSearcherItem))
                    {
                        return(false);
                    }

                    return(filter.Keep(item.Name));
                };
            }
            else
            {
                MatchFilter = null;
                return(m_ItemList);
            }

            var finalResults = new List <SearcherItem> {
                null
            };
            var max = new Result();

            // ReSharper disable once RedundantLogicalConditionalExpressionOperand
            if (m_ItemList.Count > 100)
            {
                SearchMultithreaded(query, max, finalResults);
            }
            else
            {
                SearchSingleThreaded(query, max, finalResults);
            }

            localMaxScore = max.maxScore;
            if (max.item != null)
            {
                finalResults[0] = max.item;
            }
            else
            {
                finalResults.RemoveAt(0);
            }

            return(finalResults);
        }