Ejemplo n.º 1
0
        /// <summary>
        /// 微博搜索
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public ActionResult Search(MicroblogFullTextQuery query)
        {
            query.PageSize = 20;//每页记录数

            //调用搜索器进行搜索
            MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
            PagingDataSet <MicroblogEntity> microblogEntities = microblogSearcher.Search(query);

            //添加到用户搜索历史
            IUser CurrentUser = UserContext.CurrentUser;

            if (CurrentUser != null)
            {
                SearchHistoryService searchHistoryService = new SearchHistoryService();
                searchHistoryService.SearchTerm(CurrentUser.UserId, MicroblogSearcher.CODE, query.Keyword);
            }
            //添加到热词
            if (!string.IsNullOrWhiteSpace(query.Keyword))
            {
                SearchedTermService searchedTermService = new SearchedTermService();
                searchedTermService.SearchTerm(MicroblogSearcher.CODE, query.Keyword);
            }

            //设置页面Meta
            if (string.IsNullOrWhiteSpace(query.Keyword))
            {
                pageResourceManager.InsertTitlePart("搜索");//设置页面Title
            }
            else
            {
                pageResourceManager.InsertTitlePart('“' + query.Keyword + '”' + "的相关微博");//设置页面Title
            }

            return(View(microblogEntities));
        }
Ejemplo n.º 2
0
        public ActionResult _List(SortBy_Microblog?sortBy = null, long?tagGroupId = null, int pageIndex = 1)
        {
            //获取微博分页数据
            PagingDataSet <MicroblogEntity> microblogs = null;

            if (tagGroupId.HasValue && tagGroupId.Value > 0)
            {
                IEnumerable <string>   tagNames = tagService.GetTagsOfGroup(tagGroupId.Value);
                MicroblogFullTextQuery query    = new MicroblogFullTextQuery();
                query.PageIndex = pageIndex;
                query.PageSize  = 30;//每页记录数
                query.Keywords  = tagNames;
                //调用搜索器进行搜索
                MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
                microblogs = microblogSearcher.Search(query);
            }
            else
            {
                microblogs = microblogService.GetPagings(pageIndex, tenantTypeId: TenantTypeIds.Instance().User(), sortBy: sortBy ?? SortBy_Microblog.DateCreated);

                ////当第一次加载页面时获取当前页的最新一条微博的ID
                //if (pageIndex == 1)
                //{
                //    ViewData["lastMicroblogId"] = microblogs.OrderByDescending(m => m.MicroblogId).Select(m => m.MicroblogId).FirstOrDefault();
                //}
            }
            return(View(microblogs));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 微博快捷搜索
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public ActionResult _QuickSearch(MicroblogFullTextQuery query, int topNumber)
        {
            query.PageSize  = topNumber;//每页记录数
            query.PageIndex = 1;
            query.IsGroup   = false;

            //调用搜索器进行搜索
            MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
            PagingDataSet <MicroblogEntity> microblogEntities = microblogSearcher.Search(query);

            return(PartialView(microblogEntities));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 翻页获取微博(图片模式 按标签分组搜时)
        /// </summary>
        /// <param name="tagGroupId"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public ActionResult _WaterfallGetMicroblogByTagGroup(long tagGroupId, int pageIndex = 1, int pageSize = 30)
        {
            IEnumerable <string>   tagNames = tagService.GetTagsOfGroup(tagGroupId);
            MicroblogFullTextQuery query    = new MicroblogFullTextQuery();

            query.PageIndex = pageIndex;
            query.PageSize  = pageSize;//每页记录数
            query.Keywords  = tagNames;

            //调用搜索器进行搜索
            MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
            PagingDataSet <MicroblogEntity> microblogEntities = microblogSearcher.Search(query);

            return(View("_Waterfall", microblogEntities.AsEnumerable <MicroblogEntity>()));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 话题详情页
        /// </summary>
        /// <returns></returns>
        public ActionResult Topic(string topic)
        {
            IUser CurrentUser = UserContext.CurrentUser;

            if (CurrentUser == null)
            {
                return(Redirect(SiteUrls.Instance().Login(true)));
            }

            Tag tag = tagService.Get(topic);

            if (tag == null)
            {
                return(HttpNotFound());
            }


            FavoriteService FavoriteService = new FavoriteService(TenantTypeIds.Instance().Tag());
            bool            isFavorited     = FavoriteService.IsFavorited(tag.TagId, CurrentUser.UserId);

            ViewData["isFavorited"] = isFavorited;

            pageResourceManager.InsertTitlePart(tag.TagName);
            if (!string.IsNullOrEmpty(tag.Description))
            {
                pageResourceManager.SetMetaOfDescription(HtmlUtility.StripHtml(tag.Description, true, false));
            }

            //话题下有没有微博
            string tagName = tag.TagName;

            //调用搜索器进行搜索
            MicroblogFullTextQuery query = new MicroblogFullTextQuery();

            query.PageIndex = 1;
            query.PageSize  = 20;//每页记录数
            query.Keywords  = new List <string> {
                tagName
            };

            MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
            PagingDataSet <MicroblogEntity> microblogEntities = microblogSearcher.Search(query);

            ViewData["microblogEntities"] = microblogEntities;

            return(View(tag));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 话题相关的微博列表
        /// </summary>
        /// <param name="tagId"></param>
        /// <param name="pageSize"></param>
        /// <param name="pageIndex"></param>
        /// <returns></returns>
        public ActionResult _TopicMicroblogList(long tagId, int pageSize = 20, int pageIndex = 1)
        {
            Tag    tag     = tagService.Get(tagId);
            string tagName = tag.TagName;

            //调用搜索器进行搜索
            MicroblogFullTextQuery query = new MicroblogFullTextQuery();

            query.PageIndex = pageIndex;
            query.PageSize  = pageSize;//每页记录数
            query.Keywords  = new List <string> {
                tagName
            };

            MicroblogSearcher microblogSearcher = (MicroblogSearcher)SearcherFactory.GetSearcher(MicroblogSearcher.CODE);
            PagingDataSet <MicroblogEntity> microblogEntities = microblogSearcher.Search(query);

            return(View(microblogEntities));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 微博分页搜索
        /// </summary>
        /// <param name="query">搜索条件</param>
        /// <returns>符合搜索条件的分页集合</returns>
        public PagingDataSet <MicroblogEntity> Search(MicroblogFullTextQuery microBlogQuery)
        {
            if (microBlogQuery.Keywords == null && string.IsNullOrWhiteSpace(microBlogQuery.Keyword) && microBlogQuery.SearchTerm == MicroblogSearchTerm.ALL)
            {
                return(new PagingDataSet <MicroblogEntity>(new List <MicroblogEntity>()));
            }

            LuceneSearchBuilder searchBuilder = BuildLuceneSearchBuilder(microBlogQuery);

            //使用LuceneSearchBuilder构建Lucene需要Query、Filter、Sort
            Query  query  = null;
            Filter filter = null;
            Sort   sort   = null;

            searchBuilder.BuildQuery(out query, out filter, out sort);

            //调用SearchService.Search(),执行搜索
            PagingDataSet <Document> searchResult = searchEngine.Search(query, filter, sort, microBlogQuery.PageIndex, microBlogQuery.PageSize);
            IEnumerable <Document>   docs         = searchResult.ToList <Document>();

            //解析出搜索结果中的微博ID
            List <long> microblogIds = new List <long>();

            foreach (Document doc in docs)
            {
                long microblogId = long.Parse(doc.Get(MicroblogIndexDocument.MicroblogId));
                microblogIds.Add(microblogId);
            }

            //根据微博ID列表批量查询微博实例
            IEnumerable <MicroblogEntity> microblogList = microBlogService.GetMicroblogs(microblogIds);

            //组装分页对象
            PagingDataSet <MicroblogEntity> microblogs = new PagingDataSet <MicroblogEntity>(microblogList)
            {
                TotalRecords  = searchResult.TotalRecords,
                PageSize      = searchResult.PageSize,
                PageIndex     = searchResult.PageIndex,
                QueryDuration = searchResult.QueryDuration
            };

            return(microblogs);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 根据微博搜索查询条件构建Lucene查询条件
        /// </summary>
        /// <param name="userQuery"></param>
        /// <returns></returns>
        private LuceneSearchBuilder BuildLuceneSearchBuilder(MicroblogFullTextQuery microblogQuery)
        {
            LuceneSearchBuilder searchBuilder = new LuceneSearchBuilder();
            //微博搜索词匹配范围
            string fieldName = null;

            switch (microblogQuery.SearchRange)
            {
            case MicroblogSearchRange.TOPIC:
                fieldName = MicroblogIndexDocument.Topic;
                break;

            default:
                fieldName = MicroblogIndexDocument.Body;
                break;
            }
            if (microblogQuery.Keywords != null && microblogQuery.Keywords.Count() != 0)
            {
                //是否模糊查询
                if (microblogQuery.IsFuzzy)
                {
                    searchBuilder.WithPhrases(fieldName, microblogQuery.Keywords, BoostLevel.Hight, false);
                }
                else
                {
                    searchBuilder.WithFields(fieldName, microblogQuery.Keywords, true, BoostLevel.Hight, false);
                }
            }
            else
            {
                searchBuilder.WithPhrase(fieldName, microblogQuery.Keyword, BoostLevel.Hight);
            }

            //微博搜索条件过滤
            switch (microblogQuery.SearchTerm)
            {
            case MicroblogSearchTerm.ISORIGINALITY:
                searchBuilder.WithField(MicroblogIndexDocument.IsOriginality, 1, true, BoostLevel.Hight, true);
                break;

            case MicroblogSearchTerm.HASPHOTO:
                searchBuilder.WithField(MicroblogIndexDocument.HasPhoto, 1, true, BoostLevel.Hight, true);
                break;

            case MicroblogSearchTerm.HASMUSIC:
                searchBuilder.WithField(MicroblogIndexDocument.HasMusic, 1, true, BoostLevel.Hight, true);
                break;

            case MicroblogSearchTerm.HASVIDEO:
                searchBuilder.WithField(MicroblogIndexDocument.HasVideo, 1, true, BoostLevel.Hight, true);
                break;

            default:
                break;
            }

            ////筛选租户类型
            //if (!string.IsNullOrEmpty(microblogQuery.TenantTypeId))
            //{
            //    searchBuilder.WithField(MicroblogIndexDocument.TenantTypeId, microblogQuery.TenantTypeId, true, BoostLevel.Hight, true);
            //}
            if (!microblogQuery.IsGroup)
            {
                searchBuilder.NotWithField(MicroblogIndexDocument.TenantTypeId, TenantTypeIds.Instance().Group());
            }

            //微博排序
            searchBuilder.SortByString(MicroblogIndexDocument.DateCreated, true);

            return(searchBuilder);
        }