Example #1
0
        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));
        }
Example #2
0
        private void SetCurrentVersionLanguages(string version)
        {
            var versionLanguages = DocumentSession.Query <DocumentationPages_LanguagesAndVersions.DocumentationLanguageAndVersion, DocumentationPages_LanguagesAndVersions>()
                                   .Where(x => x.Version == version)
                                   .Select(x => x.Language)
                                   .Distinct()
                                   .ToList()
                                   .Select(x => DocumentationLanguage.Parse(x))
                                   .ToList();

            ViewBag.CurrentVersionLanguages = versionLanguages;
        }
Example #3
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
        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));
        }