示例#1
0
        public int SearchHeadwordByCriteriaResultsCount(IEnumerable <SearchCriteriaContract> searchCriterias,
                                                        DictionarySearchTarget searchTarget)
        {
            var criterias = searchCriterias.ToList();

            m_authorizationManager.AuthorizeCriteria(criterias);

            var filteredCriterias    = FilterSearchCriterias(criterias);
            var nonMetadataCriterias = filteredCriterias.NonMetadataCriterias;
            var creator = new SearchCriteriaQueryCreator(filteredCriterias.ConjunctionQuery, filteredCriterias.MetadataParameters);

            // Only SQL search
            if (searchTarget == DictionarySearchTarget.Headword)
            {
                var query = GetSingleHeadwordQuery(filteredCriterias.MetadataCriterias);
                if (query == null)
                {
                    return(0);
                }

                creator.SetHeadwordQueryParameter(query);

                var resultCount = m_bookVersionRepository.GetSearchHeadwordCount(creator);
                return(resultCount);
            }

            // Advanced search
            var databaseSearchResult = m_bookVersionRepository.SearchByCriteriaQuery(creator);

            if (databaseSearchResult.Count == 0)
            {
                return(0);
            }

            if (nonMetadataCriterias.All(x => x.Key == CriteriaKey.Result))
            {
                // Search only in SQL
                var headwordQueryCreator = new HeadwordCriteriaQueryCreator();
                headwordQueryCreator.AddCriteria(filteredCriterias.MetadataCriterias);
                var bookGuidList = databaseSearchResult.Select(x => x.Guid);
                var resultCount  = m_bookVersionRepository.GetHeadwordCountBySearchCriteria(bookGuidList, headwordQueryCreator);
                return(resultCount);
            }

            // Fulltext search
            var resultContract = new ResultRestrictionCriteriaContract
            {
                ResultBooks = databaseSearchResult
            };
            var headwordContracts = filteredCriterias.MetadataCriterias.Where(x => x.Key == CriteriaKey.Headword);

            nonMetadataCriterias.Add(resultContract);
            nonMetadataCriterias.AddRange(headwordContracts);

            return(m_searchServiceClient.ListSearchDictionariesResultsCount(nonMetadataCriterias));
        }
示例#2
0
        public HeadwordListContract SearchHeadwordByCriteria(IEnumerable <SearchCriteriaContract> searchCriterias, DictionarySearchTarget searchTarget)
        {
            var criterias = searchCriterias.ToList();

            m_authorizationManager.AuthorizeCriteria(criterias);

            var filteredCriterias = FilterSearchCriterias(criterias);
            var resultCriteria    = filteredCriterias.ResultCriteria;
            var creator           = new SearchCriteriaQueryCreator(filteredCriterias.ConjunctionQuery, filteredCriterias.MetadataParameters);

            // Only SQL search
            if (searchTarget == DictionarySearchTarget.Headword)
            {
                if (resultCriteria.Start == null || resultCriteria.Count == null)
                {
                    return(null);
                }

                var query = GetSingleHeadwordQuery(filteredCriterias.MetadataCriterias);
                if (query == null)
                {
                    return(new HeadwordListContract());
                }

                creator.SetHeadwordQueryParameter(query);

                var databaseHeadwords = m_bookVersionRepository.SearchHeadwordByCriteria(creator, resultCriteria.Start.Value, resultCriteria.Count.Value);

                return(ConvertHeadwordSearchToContract(databaseHeadwords));
            }

            // Advanced search
            var databaseSearchResult = m_bookVersionRepository.SearchByCriteriaQuery(creator);

            if (databaseSearchResult.Count == 0)
            {
                return new HeadwordListContract
                       {
                           BookList     = new Dictionary <string, DictionaryContract>(),
                           HeadwordList = new List <HeadwordContract>()
                       }
            }
            ;

            if (filteredCriterias.NonMetadataCriterias.All(x => x.Key == CriteriaKey.Result))
            {
                // Search only in SQL
                if (resultCriteria.Start == null || resultCriteria.Count == null)
                {
                    return(null);
                }

                var headwordQueryCreator = new HeadwordCriteriaQueryCreator();

                headwordQueryCreator.AddCriteria(filteredCriterias.MetadataCriterias);
                var bookGuidList    = databaseSearchResult.Select(x => x.Guid);
                var resultHeadwords = m_bookVersionRepository.GetHeadwordListBySearchCriteria(bookGuidList, headwordQueryCreator,
                                                                                              resultCriteria.Start.Value, resultCriteria.Count.Value);
                return(ConvertHeadwordSearchToContract(resultHeadwords));
            }

            // Fulltext search
            var resultRestrictionContract = new ResultRestrictionCriteriaContract
            {
                ResultBooks = databaseSearchResult
            };
            var headwordContracts    = filteredCriterias.MetadataCriterias.Where(x => x.Key == CriteriaKey.Headword);
            var nonMetadataCriterias = filteredCriterias.NonMetadataCriterias;

            nonMetadataCriterias.Add(resultRestrictionContract);
            nonMetadataCriterias.AddRange(headwordContracts);

            var resultContract = m_searchServiceClient.ListSearchDictionariesResults(nonMetadataCriterias);

            // fill book info
            var bookInfoList      = m_bookVersionRepository.GetBookVersionsByGuid(resultContract.BookList.Keys.ToList());
            var bookInfoContracts = Mapper.Map <IList <DictionaryContract> >(bookInfoList);
            var bookDictionary    = bookInfoContracts.ToDictionary(x => x.BookXmlId, x => x);

            resultContract.BookList = bookDictionary;

            return(resultContract);
        }
示例#3
0
 public int SearchHeadwordByCriteriaResultsCount(IEnumerable <SearchCriteriaContract> searchCriterias, DictionarySearchTarget searchTarget)
 {
     return(m_searchManager.SearchHeadwordByCriteriaResultsCount(searchCriterias, searchTarget));
 }
示例#4
0
 public HeadwordListContract SearchHeadwordByCriteria(IEnumerable <SearchCriteriaContract> searchCriterias, DictionarySearchTarget searchTarget)
 {
     return(m_searchManager.SearchHeadwordByCriteria(searchCriterias, searchTarget));
 }