Пример #1
0
 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;
 }
Пример #2
0
 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;
 }
Пример #3
0
        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;
        }
Пример #4
0
        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;
        }