/// <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)); }
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)); }
/// <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)); }
/// <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>())); }
/// <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)); }
/// <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)); }
/// <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); }
/// <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); }