Advertisement
Guest User

TehOne

a guest
Aug 2nd, 2010
524
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.41 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace MySiteSharePoint
  7. {
  8.     public enum SearchOrderDirection
  9.     {
  10.         Asc,
  11.         Desc
  12.     }
  13.  
  14.     public enum SearchScopeType
  15.     {
  16.         Intranet,
  17.         Knowledge,
  18.         People
  19.     }
  20.  
  21.     public class SearchQuery
  22.     {
  23.         public bool EnableStemming = false;
  24.         public bool IgnoreAllNoiseQuery = true;
  25.         public bool ImplicitAndBehavior = true;
  26.         public bool IncludeHighConfidenceResults = false;
  27.         public bool IncludeRelevanceResults = false;
  28.         public bool IncludeSpecialTermResults = false;
  29.         public bool TrimDuplicates = true;
  30.         public int RangeCount = 20;
  31.         public int RangeStart = 1;
  32.         public List<string> OutputColumns = new List<string>();
  33.         public List<string> SearchScopes = new List<string>();
  34.         public Dictionary<string, SearchOrderDirection> OrderByColumns = new Dictionary<string, SearchOrderDirection>();
  35.         public List<KeyValuePair<string, string>> SearchFilters = new List<KeyValuePair<string,string>>();
  36.  
  37.         public SearchQuery(SearchScopeType searchScopeType)
  38.         {
  39.             OutputColumns.Add("Title");
  40.             OutputColumns.Add("Rank");
  41.             OutputColumns.Add("Size");
  42.             OutputColumns.Add("Description");
  43.             OutputColumns.Add("Write");
  44.             OutputColumns.Add("Path");
  45.            
  46.             if (searchScopeType == SearchScopeType.People)
  47.             {
  48.                 this.SearchScopes.Add("People");
  49.  
  50.                 OutputColumns.Add("AccountName");
  51.                 OutputColumns.Add("BusinessUnit");
  52.                 OutputColumns.Add("Department");
  53.                 OutputColumns.Add("FirstName");
  54.                 OutputColumns.Add("JobFamily");
  55.                 OutputColumns.Add("JobTitle");
  56.                 OutputColumns.Add("LastName");
  57.                 OutputColumns.Add("Location");
  58.                 OutputColumns.Add("Manager");
  59.                 OutputColumns.Add("Team");
  60.                 OutputColumns.Add("TechnicalSkills");
  61.                 OutputColumns.Add("WorkPhone");
  62.  
  63.                 OrderByColumns.Add("LastName", SearchOrderDirection.Asc);
  64.                 OrderByColumns.Add("FirstName", SearchOrderDirection.Asc);
  65.             }
  66.  
  67.             if (searchScopeType == SearchScopeType.Knowledge)
  68.             {
  69.                 this.SearchScopes.Add("Knowledge");
  70.             }
  71.  
  72.             if (searchScopeType == SearchScopeType.Intranet)
  73.             {
  74.                 this.SearchScopes.Add("All Sites");
  75.             }
  76.  
  77.             OrderByColumns.Add("Rank", SearchOrderDirection.Desc);
  78.         }
  79.  
  80.         public override string ToString()
  81.         {
  82.             if (this.OutputColumns.Count == 0)
  83.             {
  84.                 throw new Exception("There must be at least 1 item in the OutputColumns list.");
  85.             }
  86.             if (this.OrderByColumns.Count == 0)
  87.             {
  88.                 throw new Exception("There must be at least 1 item in the OrderByColumns list.");
  89.             }
  90.             if (this.SearchFilters.Count == 0)
  91.             {
  92.                 throw new Exception("There must be at least 1 item in the SearchFilters list.");
  93.             }
  94.             if (this.SearchScopes.Count == 0)
  95.             {
  96.                 throw new Exception("There must be at least 1 item in the SearchScopes list.");
  97.             }
  98.  
  99.             bool isFirstLoop = true;
  100.             StringBuilder sb = new StringBuilder();
  101.  
  102.             sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  103.             sb.AppendLine("<QueryPacket xmlns=\"urn:Microsoft.Search.Query\" Revision=\"1000\">");
  104.             sb.AppendLine("<Query domain=\"QDomain\">");
  105.             sb.AppendLine("<SupportedFormats>");
  106.             sb.AppendLine("<Format>urn:Microsoft.Search.Response.Document.Document</Format>");
  107.             sb.AppendLine("</SupportedFormats>");
  108.             sb.AppendLine("<Context>");
  109.             sb.Append("<QueryText language=\"en-US\" type=\"MSSQLFT\"><![CDATA[ SELECT ");
  110.  
  111.             for(int i = 0; i < this.OutputColumns.Count; i++)
  112.             {
  113.                 if (i > 0)
  114.                 {
  115.                     sb.Append(", ");
  116.                 }
  117.                 sb.Append(this.OutputColumns[i]);
  118.             }
  119.            
  120.             sb.Append("FROM portal..scope() WHERE (");
  121.  
  122.             for(int i = 0; i < this.SearchFilters.Count; i++)
  123.             {
  124.                 if (i > 0)
  125.                 {
  126.                     sb.Append(" AND ");
  127.                 }
  128.                 if (this.SearchFilters[i].Key.IsNotEmpty())
  129.                 {
  130.                     sb.AppendFormat("CONTAINS(\"{0}\",'\"{1}\"')", this.SearchFilters[i].Key, this.SearchFilters[i].Value);
  131.                 }
  132.                 else
  133.                 {
  134.                     sb.AppendFormat("CONTAINS('\"{0}\"')", this.SearchFilters[i].Value);
  135.                 }
  136.             }
  137.  
  138.             sb.Append(") AND (");
  139.            
  140.             for(int i = 0; i < this.SearchScopes.Count; i++)
  141.             {
  142.                 if (i > 0)
  143.                 {
  144.                     sb.Append(" OR ");
  145.                 }
  146.                 sb.AppendFormat("(\"SCOPE\" = '{0}')", this.SearchScopes[i]);
  147.             }
  148.  
  149.             sb.Append(")  ORDER BY ");
  150.  
  151.             isFirstLoop = true;
  152.            
  153.             foreach (var kvp in this.OrderByColumns)
  154.             {
  155.                 if (!isFirstLoop)
  156.                 {
  157.                     sb.Append(", ");
  158.                 }
  159.                 sb.AppendFormat("\"{0}\" {1}", kvp.Key, kvp.Value);
  160.  
  161.                 isFirstLoop = false;
  162.             }
  163.            
  164.             sb.Append("]]></QueryText>");
  165.             sb.Append("</Context>");
  166.             sb.Append("<Range>");
  167.             sb.AppendFormat("<Count>{0}</Count>", this.RangeCount);
  168.             sb.AppendFormat("<StartAt>{0}</StartAt>", this.RangeStart);
  169.             sb.Append("</Range>");
  170.             sb.AppendFormat("<EnableStemming>{0}</EnableStemming>", this.EnableStemming);
  171.             sb.AppendFormat("<IgnoreAllNoiseQuery>{0}</IgnoreAllNoiseQuery>", this.IgnoreAllNoiseQuery);
  172.             sb.AppendFormat("<ImplicitAndBehavior>{0}</ImplicitAndBehavior>", this.ImplicitAndBehavior);
  173.             sb.AppendFormat("<IncludeHighConfidenceResults>{0}</IncludeHighConfidenceResults>", this.IncludeHighConfidenceResults);
  174.             sb.AppendFormat("<IncludeRelevanceResults>{0}</IncludeRelevanceResults>", this.IncludeRelevanceResults);
  175.             sb.AppendFormat("<IncludeSpecialTermResults>{0}</IncludeSpecialTermResults>", this.IncludeSpecialTermResults);
  176.             sb.AppendFormat("<TrimDuplicates>{0}</TrimDuplicates>", this.TrimDuplicates);
  177.             sb.AppendFormat("</Query>");
  178.             sb.AppendFormat("</QueryPacket>");
  179.  
  180.             return sb.ToString();
  181.         }
  182.     }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement