⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gallerysearch.cs

📁 本系统是在asp版《在线文件管理器》的基础上设计制作
💻 CS
字号:
//------------------------------------------------------------------------------
// <copyright company="Telligent Systems">
//     Copyright (c) Telligent Systems Corporation.  All rights reserved.
// </copyright> 
//------------------------------------------------------------------------------

using System.Collections;
using CommunityServer.Components;

namespace CommunityServer.Galleries.Components
{
	/// <summary>
	/// Summary description for GallerySearch.
	/// </summary>
	public class GallerySearch : Search
	{
		public GallerySearch() { }

        protected override ArrayList GetPermissionFilterList()
        {
            return Sections.FilterByAccessControl(Galleries.GetGalleries(), Permission.View);
        }


		public override void IndexPosts(int setSize, int settingsID)
		{
			PostSet postSet =  GalleryDataProvider.Instance().SearchReindexPosts(setSize , settingsID);

			foreach (Post post in postSet.Posts) 
			{
				Hashtable words = new Hashtable();
				int totalBodyWords = 0;

				Picture picture = post as Picture;
				if(picture != null)
				{
					// Username
					words = Index(picture.Username, words, WordLocation.Author, settingsID);

					// Subject
					words = Index(picture.Subject, words, WordLocation.Subject, settingsID);

					// Count the attachment filename with the subject, if it doesn't equal the subject
					if(picture.Subject != picture.AttachmentFilename)
						words = Index(picture.AttachmentFilename, words, WordLocation.Subject, settingsID);

					// Body
					words = Index(picture.Body, words, WordLocation.Body, settingsID);

					// Get a count of the total words in the body
					totalBodyWords = CleanSearchTerms(post.Body).Length;
					InsertIntoSearchBarrel(words, post, settingsID, totalBodyWords);
				
				}

				GalleryComment comment = post as GalleryComment;
				if(comment != null)
				{
					// Username
					words = Index(comment.Username, words, WordLocation.Author, settingsID);

					// Comment body
					words = Index(comment.Body, words, WordLocation.Body, settingsID);

					// Get a count of the total words
					totalBodyWords = CleanSearchTerms(post.Body).Length;
					InsertIntoSearchBarrel(words, post, settingsID, totalBodyWords);
				}
			}
		}

		protected override double CalculateWordRank(Word word, Post post, int totalBodyWords)
		{
			int wordOccurrence = 0;
			double replyWeight = 0;
			double wordCount = 0;
			double rating = 0;
			int totalRatings = 0;

			// Word weighting:
			// ============================
			// Word Occurence:      20
			// Replies:             20
			// Total words in post: 20
			// Word in Subject:     10
			// Rating:              15
			//                    ----
			// Max score:           85

			// Assign a score for how many times the word occurs in the post
			//
			wordOccurrence = word.Occurence * 2;
			if(wordOccurrence > 20)
				wordOccurrence = 20;

			// Calculate the score for replies
			//
			if((post.PostLevel == 1) && (post.Replies == 0)) 
				replyWeight = 0;  // A post with no replies
			else 
			{
				replyWeight = ( (post.PostLevel - (post.Replies * 0.01)) / (post.PostLevel + post.Replies) ) * 20f;

				// If less than 0, weighting is 0
				if(replyWeight < 0)
					replyWeight = 0;
			}

			// Calculate a score for the count of total words in the post
			//
			if (totalBodyWords > 65)
				wordCount = 20;
			else
				wordCount = (totalBodyWords / 65f) * 20f;

			// Calculate the score for the ratings
			//
			if(post is IThread) 
			{
				IThread thread = (IThread) post;

				// Handle ratings
				if(thread.TotalRatings > 0)
				{
					// 5 points for rating greater than 10 ratings
					if (thread.TotalRatings > 25)
						totalRatings = 5;
					else if (thread.TotalRatings > 20)
						totalRatings = 4;
					else if (thread.TotalRatings > 15)
						totalRatings = 3;
					else if (thread.TotalRatings > 10)
						totalRatings = 2;
					else
						totalRatings = 1;

					rating = (thread.ThreadRating * 2);
				}
			}

			// Calculate the final weight of the word
			//
			return (wordOccurrence + replyWeight + word.OccurenceWeight + wordCount + totalRatings + rating) / 85f;
		}

		protected override SearchResultSet GetSearchResults(SearchQuery query, SearchTerms terms)
		{
			return GalleryDataProvider.Instance().GetSearchResults(query, terms);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -