internal override IEnumerable <SearchResult> SearchWord(string word, SearchIndexOperator op, SearchResultCollection subset) { //using (new DebugTimer($"Search word {word}, {op}, {subset?.Count}")) { foreach (var r in base.SearchWord(word, op, subset)) { yield return(r); } var baseScore = settings.baseScore; var options = FindOptions.Words | FindOptions.Regex | FindOptions.Glob; if (op == SearchIndexOperator.Equal) { options = FindOptions.Exact; } var documents = subset != null?subset.Select(r => GetDocument(r.index)) : GetDocuments(ignoreNulls: true); foreach (var r in FindProvider.SearchWord(false, word, options, documents)) { if (m_IndexByDocuments.TryGetValue(r.id, out var documentIndex)) { yield return(new SearchResult(r.id, documentIndex, baseScore + r.score + 5)); } } } }
internal override IEnumerable <SearchResult> SearchWord(string word, SearchIndexOperator op, SearchResultCollection subset) { var baseScore = settings.baseScore; var options = FindOptions.Words | FindOptions.Regex | FindOptions.Glob /* | FindOptions.Fuzzy*/; if (op == SearchIndexOperator.Equal) { options = FindOptions.Exact; } var documents = subset != null?subset.Select(r => GetDocument(r.index)) : GetDocuments(ignoreNulls: true); return(base.SearchWord(word, op, subset) .Concat(FindProvider.SearchWord(false, word, options, documents) .Select(r => new SearchResult(r.id, m_IndexByDocuments[r.id], baseScore + r.score + 5)))); }