public static IndexState GetByLanguageName(string languageName)
        {
            var language = ElasticEpiLanguageHelper.Resolve(languageName);

            switch (language)
            {
            case Language.English:
                return(GetEnglishState());

            case Language.Bokmal:
            case Language.Nynorsk:
                return(GetNorwegianState(language));

            default:
                return(GetEnglishState());
            }
        }
        public ActionResult Search(string searchString, string language)
        {
            var searchParams = new ElasticEpiSearchParams(searchString, language)
            {
                Query = searchString,
                IsExcludedFromStatistics = true,
                Take = 100
            };

            var result = ElasticEpiSearch <ElasticEpiDocument> .Current.Search(searchParams);

            var viewModel = new SearchResultViewModel();

            var norwegianCultures = ElasticEpiLanguageHelper.GetNorwegianCultures().Bokmal;

            foreach (var res in result.Items)
            {
                viewModel.Items.Add(new SearchResultViewModel.SearchResultItemViewModel
                {
                    Title       = res.Document.Title,
                    Ingress     = res.Document.Ingress,
                    Content     = res.Document.Body,
                    Type        = res.Document.TypeName,
                    ContentGuid = res.Document.ContentGuid,
                    Language    = res.Document.LanguageName,
                    PublishDate = res.Document.StartPublish?.ToString(norwegianCultures.DateTimeFormat.ShortDatePattern),
                    Score       = res.Score.ToString("G")
                });
            }

            var converted = JsonConvert.SerializeObject(viewModel, Formatting.None, new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            });

            return(Json(converted, JsonRequestBehavior.AllowGet));
        }
        private static IndexState GetNorwegianState(Language variant)
        {
            var norwegianCultures = ElasticEpiLanguageHelper.GetNorwegianCultures();

            var settings = new IndexSettings
            {
                Analysis = new Analysis
                {
                    Tokenizers = new Tokenizers
                    {
                        {
                            "epi_ngram_tokenizer", new NGramTokenizer
                            {
                                MaxGram = 5,
                                MinGram = 3
                            }
                        }
                    },
                    TokenFilters = new TokenFilters
                    {
                        {
                            "epi_norwegian_stopwords", new StopTokenFilter
                            {
                                StopWordsPath = "norwegian_stop.txt"
                            }
                        },
                        {
                            "epi_norwegian_stemmer", new StemmerTokenFilter
                            {
                                Language = variant == Language.Bokmal ? "light_norwegian" : "light_nynorsk"
                            }
                        },
                        {
                            "epi_norwegian_synonyms", new SynonymTokenFilter
                            {
                                SynonymsPath = "nynorsk.txt"
                            }
                        },
                        {
                            "epi_editor_synonyms", new SynonymTokenFilter
                            {
                                IgnoreCase = true,
                                Synonyms   = SynonymHelper.ResolveSynonymsForLanguage(variant == Language.Bokmal ? norwegianCultures.Bokmal.Name : norwegianCultures.Nynorsk.Name),
                                Tokenizer  = "keyword",
                                Expand     = true
                            }
                        }
                    },
                    Analyzers = new Analyzers
                    {
                        {
                            Names.Analyzers.Ngram, new CustomAnalyzer
                            {
                                CharFilter = new[] { "html_strip" },
                                Tokenizer  = "epi_ngram_tokenizer",
                                Filter     = new[]
                                {
                                    "lowercase", "epi_norwegian_stopwords", "epi_norwegian_stemmer"
                                }
                            }
                        },
                        {
                            Names.Analyzers.Language, new CustomAnalyzer
                            {
                                CharFilter = new[] { "html_strip" },
                                Tokenizer  = "standard",
                                Filter     = new[]
                                {
                                    "lowercase", "epi_norwegian_synonyms", "epi_editor_synonyms", "epi_norwegian_stopwords", "epi_norwegian_stemmer"
                                }
                            }
                        }
                    }
                }
            };

            return(new IndexState
            {
                Settings = settings
            });
        }