protected string GetElasticFieldName(SortTypeEnumContract sortValue)
        {
            switch (sortValue)
            {
            case SortTypeEnumContract.Title:
                return(TitleField);

            case SortTypeEnumContract.Author:
                return(AuthorField);

            case SortTypeEnumContract.Dating:
                return(DatingField);

            default:
                return(TitleField);
            }
        }
        public ActionResult AdvancedSearchCorpusPaged(string json, int start, int count, int contextLength, SortTypeEnumContract sortingEnum, bool sortAsc,
                                                      IList <long> selectedBookIds, IList <int> selectedCategoryIds)
        {
            var deserialized =
                JsonConvert.DeserializeObject <IList <ConditionCriteriaDescriptionBase> >(json, new ConditionCriteriaDescriptionConverter());
            var listSearchCriteriaContracts = Mapper.Map <List <SearchCriteriaContract> >(deserialized);

            if (listSearchCriteriaContracts.FirstOrDefault(x =>
                                                           x.Key == CriteriaKey.Fulltext || x.Key == CriteriaKey.Heading || x.Key == CriteriaKey.Sentence ||
                                                           x.Key == CriteriaKey.TokenDistance) == null) //TODO add check on string values empty
            {
                throw new ArgumentException("search in text can't be ommited");
            }

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);

            var client     = GetBookClient();
            var resultList = client.SearchCorpus(new CorpusSearchRequestContract
            {
                Start                = start,
                Count                = count,
                ContextLength        = contextLength,
                ConditionConjunction = listSearchCriteriaContracts,
                Sort          = sortingEnum,
                SortDirection = sortAsc == false ? SortDirectionEnumContract.Desc : SortDirectionEnumContract.Asc,
            }, GetDefaultProjectType());

            return(Json(new { results = resultList }));
        }
        public ActionResult TextSearchFulltextPaged(string text, int start, int count, int contextLength, SortTypeEnumContract sortingEnum, bool sortAsc,
                                                    IList <long> selectedBookIds, IList <int> selectedCategoryIds)
        {
            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentException("text can't be null in fulltext search");
            }

            var listSearchCriteriaContracts = CreateTextCriteriaList(CriteriaKey.Fulltext, text);

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);

            var client     = GetBookClient();
            var resultList = client.SearchCorpus(new CorpusSearchRequestContract
            {
                Start                = start,
                Count                = count,
                ContextLength        = contextLength,
                ConditionConjunction = listSearchCriteriaContracts,
                Sort          = sortingEnum,
                SortDirection = sortAsc == false ? SortDirectionEnumContract.Desc : SortDirectionEnumContract.Asc,
            }, GetDefaultProjectType());

            return(Json(new { results = resultList }));
        }