public virtual ActionResult Suggest(string language, string version, string searchTerm) { var tokens = GetSearchTokens(searchTerm); var lang = DocumentationLanguage.Parse(language); var ver = DocsVersion.Parse(version); FieldHighlightings contentHighlighting; var query = Session.Advanced.DocumentQuery <DocumentationPage>() .Highlight("TextContent", 128, 1, out contentHighlighting) .SetHighlighterTags("<span class='search-result-highlight'>", "</span>") .WhereIn(x => x.Language, new[] { Language.All, lang }) .AndAlso() .WhereEquals(x => x.Version, ver) .AndAlso() .OpenSubclause() .Search(x => x.Title, tokens.HighImportanceTerms).Boost(50) .OrElse() .Search(x => x.TextContent, tokens.HighImportanceTerms).Boost(35); if (string.IsNullOrWhiteSpace(tokens.MediumImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.MediumImportanceTerms).Boost(20) .OrElse() .Search(x => x.TextContent, tokens.MediumImportanceTerms).Boost(5); } if (string.IsNullOrWhiteSpace(tokens.LowImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.LowImportanceTerms) .OrElse() .Search(x => x.TextContent, tokens.LowImportanceTerms); } var results = query .CloseSubclause() .Select( x => new SuggestItem { Language = (x.Language == Language.All ? Language.Csharp : x.Language).ToString().ToLowerInvariant(), Key = x.Key, Version = x.Version, Title = x.Title }) .Take(5) .ToArray(); return(Json(results, JsonRequestBehavior.AllowGet)); }
public virtual ActionResult Suggest(string language, string version, string searchTerm) { var tokens = GetSearchTokens(searchTerm); var lang = DocumentationLanguage.Parse(language); var ver = DocsVersion.Parse(version); var query = Session.Advanced.DocumentQuery <DocumentationPage>() .WhereIn(x => x.Language, new[] { Language.All, lang }) .AndAlso() .WhereEquals(x => x.Version, ver) .AndAlso() .OpenSubclause() .Search(x => x.Title, tokens.HighImportanceTerms).Boost(50) .OrElse() .Search(x => x.TextContent, tokens.HighImportanceTerms).Boost(35); if (string.IsNullOrWhiteSpace(tokens.MediumImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.MediumImportanceTerms).Boost(20) .OrElse() .Search(x => x.TextContent, tokens.MediumImportanceTerms).Boost(5); } if (string.IsNullOrWhiteSpace(tokens.LowImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.LowImportanceTerms) .OrElse() .Search(x => x.TextContent, tokens.LowImportanceTerms); } var results = query .CloseSubclause() .Select( x => new SuggestItem { Language = (x.Language == Language.All ? Language.Csharp : x.Language).ToString().ToLowerInvariant(), Key = x.Key, Version = x.Version, Title = x.Title }) .Take(5) .ToArray(); return(CamelCaseJsonResult(results)); }
public virtual ActionResult ArticlePage(string version, string language, string key, int?page, string fullVersion) { if (string.Equals("latest", version, StringComparison.OrdinalIgnoreCase)) { return(RedirectToAction(MVC.Docs.ActionNames.ArticlePage, new { key, page, language, version = DocsVersion.Default })); } version = DocsVersion.Parse(version); var lang = DocumentationLanguage.Parse(language); ViewBag.Key = key; SetCurrentVersionLanguages(version); return(ViewDoc(version, key, lang)); }
public virtual ActionResult Search(string language, string version, string searchTerm) { if (string.IsNullOrEmpty(searchTerm)) { return(RedirectToAction(MVC.Docs.ActionNames.Index, MVC.Docs.Name)); } if (string.Equals("latest", version, StringComparison.OrdinalIgnoreCase)) { return(RedirectToAction(MVC.Docs.ActionNames.Search, new { language, version = DocsVersion.Default, searchTerm })); } var lang = DocumentationLanguage.Parse(language); version = DocsVersion.Parse(version); SetCurrentVersionLanguages(version); ViewBag.Term = searchTerm; var tokens = GetSearchTokens(searchTerm); var query = Session.Advanced.DocumentQuery <DocumentationPage>() .WhereIn(x => x.Language, new[] { Language.All, lang }) .AndAlso() .WhereEquals(x => x.Version, version) .AndAlso() .OpenSubclause() .Search(x => x.Title, tokens.HighImportanceTerms).Boost(50) .OrElse() .Search(x => x.TextContent, tokens.HighImportanceTerms).Boost(35); if (string.IsNullOrWhiteSpace(tokens.MediumImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.MediumImportanceTerms).Boost(20) .OrElse() .Search(x => x.TextContent, tokens.MediumImportanceTerms).Boost(5); } if (string.IsNullOrWhiteSpace(tokens.LowImportanceTerms) == false) { query = query .OrElse() .Search(x => x.Title, tokens.LowImportanceTerms) .OrElse() .Search(x => x.TextContent, tokens.LowImportanceTerms); } var results = query .CloseSubclause() .Take(30) .ToArray(); var transformedSearchResults = from result in results select new ArticleSearchResult { Key = result.Key, Title = result.Title, Version = result.Version, Category = result.Category.GetDescription(), }; var groupedSearchResults = from result in transformedSearchResults group result by result.Category; var viewModel = new DocSearchViewModel( version, lang, searchTerm, groupedSearchResults); viewModel.FillToc(GetTableOfContents(version)); if (viewModel.SearchResults.Count == 0) { return(View("NoSearchResults", viewModel)); } return(View("SearchResults", viewModel)); }