📄 gallerysearch.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 + -