public override Query BuildQuery(Query current) { Mubble.Models.Controllers.Query q = this.Parent.Content as Mubble.Models.Controllers.Query; if (q != null) { current.Add(q.GetSpecifiedQuery()); } return current; }
public static Query Parse(XmlDocument xml, Query q) { XmlNode root = xml.FirstChild; q.OrderBy = root.Attributes["orderBy"] != null ? root.Attributes["orderBy"].Value : q.OrderBy; BooleanClause bc = new BooleanClause( GetBoolAttribute(root, "required", false), GetBoolAttribute(root, "excluded", false) ); foreach (XmlNode node in root.ChildNodes) { ParseTag(node, bc); } q.Add(bc); return q; }
public static ContentList Query(Query query, string[] groups, string[] permissions) { if (groups != null && groups.Length > 0 && permissions != null && permissions.Length > 0) { foreach (string permission in permissions) { BooleanClause bc = new BooleanClause(true, false); foreach (string role in groups) { bc.AddClause( new TermClause( string.Format("GroupWith{0}Permissions", permission), role, false, false) ); } query.Add(bc); } } if (query.OrderBy == null) query.OrderBy = "PublishDate DESC"; if (query.DefaultField == null) query.DefaultField = "Text"; ContentList results = new ContentList(); try { IndexDocument[] docs = Engine.Search(query); Dictionary<Guid, bool> usedResults = new Dictionary<Guid, bool>(docs.Length); results.StartIndex = query.StartResultIndex; results.EndIndex = query.EndResultIndex; results.TotalResults = query.TotalResults; for (int i = 0; i < docs.Length; i++) { Guid id = new Guid(docs[i].Get("ActiveObjectsID")); if (!usedResults.ContainsKey(id)) { usedResults.Add(id, true); results.Add(new Content(docs[i])); } else { LogDuplicate(id, docs[i].Get("Title")); } } usedResults.Clear(); } catch { } return results; }
public override Query BuildQuery(Query current) { System.Web.HttpRequest request = this.Parent.Page.Request; System.Web.HttpResponse response = this.Parent.Page.Response; string freetext = request.QueryString["search"]; Query q = new Query(); bool isValid = false; if (freetext != null && freetext.Length > 0) { q.Text += freetext; isValid = true; } if ("true".Equals(request.QueryString["featured"], StringComparison.CurrentCultureIgnoreCase)) { q.AddTerm("IsFeatured", "true", true, false); q.AddTerm("IsFeatured", "false", false, true); isValid = true; } string t = request.QueryString["tag"]; if (t != null && t.Trim().Length > 0) { string[] tags = t.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); Regex rx = new Regex(@"(?<Term>\w+)(?<Boost>\^\d+)"); foreach (string tag in tags) { Match m = rx.Match(tag); if (m.Success) { q.Add(new TermClause("Tag", m.Groups["Term"].Value, float.Parse(m.Groups["Boost"].Value.Substring(1)))); } else { q.AddTerm("Tag", t, true, false); } } isValid = true; } string author = request.QueryString["author"]; if (author != null && author.Length > 0) { q.AddTerm("Author", author, true, false); isValid = true; } string section = request.QueryString["path"]; if (section != null && section.Length > 1) { q.AddTerm("Path", section + "*", true, true, false); isValid = true; } if ("score".Equals(request.QueryString["sort"], StringComparison.CurrentCultureIgnoreCase)) { q.OrderBy = "Score"; } current.Add(q); if (!isValid) { current.IsValid = false; } return current; }