Ejemplo n.º 1
0
        public SearchResult[] PerformSearch(string search, FrecencyStorage frecencyStorage)
        {
            var frecencyData = frecencyStorage.GetFrecencyData();
            Func <IIndexable, int> boosterFunc = x => frecencyData.ContainsKey(x.BoostIdentifier) ? frecencyData[x.BoostIdentifier] : 0;

            _selectaSeacher = _selectaSeacher.Search(search, boosterFunc);
            return(_selectaSeacher.SearchResults.Take(100).ToArray());
        }
Ejemplo n.º 2
0
        public SearchResult[] PerformSearch(string search, FrecencyStorage frecencyStorage)
        {
            bool updated;

            _indexableUpdateState = _indexableUpdateState.CheckUpdate(out updated);

            if (updated)
            {
                Log.Information("Updated searcher with new indexables.");
                _selectaSeacher = Searcher.Create(_indexableUpdateState.Indexables);
            }

            var frecencyData = frecencyStorage.GetFrecencyData();
            Func <IIndexable, int> boosterFunc = x => frecencyData.ContainsKey(x.BoostIdentifier) ? frecencyData[x.BoostIdentifier] : 0;

            _selectaSeacher = _selectaSeacher.Search(search, boosterFunc);

            SearchResult[] searchResults = _selectaSeacher.SearchResults.Take(100).ToArray();

            try
            {
                double result = _calculationEngine.Calculate(search);
                var    name   = result.ToString(CultureInfo.InvariantCulture);

                if (!string.Equals(name, search?.Trim(), StringComparison.InvariantCultureIgnoreCase))
                {
                    searchResults = searchResults.Concat(new[] { new SearchResult(name, 0, new StringIndexable(name, "Result of formula"), ImmutableHashSet.Create <int>()) }).ToArray();
                }
            }
            catch
            {
                // Ignore calculation errors.
            }

            return(searchResults);
        }