コード例 #1
0
        public virtual IList <HeadwordSearchResult> GetHeadwordListBySearchCriteria(IEnumerable <string> selectedGuidList,
                                                                                    HeadwordCriteriaQueryCreator creator, int start, int count)
        {
            using (var session = GetSession())
            {
                Book                 bookAlias         = null;
                BookVersion          bookVersionAlias  = null;
                BookHeadword         bookHeadwordAlias = null;
                HeadwordSearchResult resultAlias       = null;

                var result = session.QueryOver(() => bookAlias)
                             .JoinQueryOver(x => x.LastVersion, () => bookVersionAlias)
                             .JoinQueryOver(x => x.BookHeadwords, () => bookHeadwordAlias)
                             .Select(Projections.Distinct(Projections.ProjectionList()
                                                          .Add(Projections.Property(() => bookAlias.Guid).WithAlias(() => resultAlias.BookGuid))
                                                          .Add(Projections.Property(() => bookVersionAlias.VersionId).WithAlias(() => resultAlias.BookVersionId))
                                                          .Add(Projections.Property(() => bookVersionAlias.Title).WithAlias(() => resultAlias.BookTitle))
                                                          .Add(Projections.Property(() => bookVersionAlias.Acronym).WithAlias(() => resultAlias.BookAcronym))
                                                          .Add(Projections.Property(() => bookVersionAlias.SourceAbbreviation).WithAlias(() => resultAlias.SourceAbbreviation))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.DefaultHeadword).WithAlias(() => resultAlias.Headword))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.SortOrder).WithAlias(() => resultAlias.SortOrder))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.XmlEntryId).WithAlias(() => resultAlias.XmlEntryId))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.Image).WithAlias(() => resultAlias.Image))))
                             .WhereRestrictionOn(() => bookAlias.Guid).IsInG(selectedGuidList)
                             .And(creator.GetCondition())
                             .OrderBy(x => x.SortOrder).Asc
                             .TransformUsing(Transformers.AliasToBean <HeadwordSearchResult>())
                             .Skip(start)
                             .Take(count)
                             .List <HeadwordSearchResult>();

                return(result);
            }
        }
コード例 #2
0
        public virtual int GetHeadwordCountBySearchCriteria(IEnumerable <string> selectedGuidList,
                                                            HeadwordCriteriaQueryCreator creator)
        {
            Book                bookAlias          = null;
            BookHeadword        bookHeadwordAlias  = null;
            HeadwordCountResult headwordCountAlias = null;

            using (var session = GetSession())
            {
                var resultList = session.QueryOver(() => bookAlias)
                                 .JoinQueryOver(x => x.LastVersion)
                                 .JoinQueryOver(x => x.BookHeadwords, () => bookHeadwordAlias)
                                 .Select(Projections.ProjectionList()
                                         .Add(
                                             Projections.CountDistinct(() => bookHeadwordAlias.XmlEntryId)
                                             .WithAlias(() => headwordCountAlias.HeadwordCount))
                                         .Add(Projections.Group(() => bookAlias.Id).WithAlias(() => headwordCountAlias.BookId))
                                         )
                                 .WhereRestrictionOn(() => bookAlias.Guid).IsInG(selectedGuidList)
                                 .And(creator.GetCondition())
                                 .TransformUsing(Transformers.AliasToBean <HeadwordCountResult>())
                                 .List <HeadwordCountResult>();

                return((int)resultList.Sum(x => x.HeadwordCount));
            }
        }
コード例 #3
0
ファイル: SearchManager.cs プロジェクト: daliboris/ITJakub
        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));
        }
コード例 #4
0
ファイル: SearchManager.cs プロジェクト: daliboris/ITJakub
        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);
        }