示例#1
0
        public virtual List <SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerCondition, bool showAllVersions, string sortField, bool reverse, int start, int end, out int totalResults)
        {
            Assert.IsNotNull(Index, "Index");
            var query = param.ProcessQuery(innerCondition, Index);

            return(RunQuery(query, showAllVersions, sortField, reverse, start, end, out totalResults));
        }
示例#2
0
        public virtual List <SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerOccurance = QueryOccurance.Must, bool showAllVersions = false, string sortField = "", bool reverse = true, int start = 0, int end = 0)
        {
            Assert.IsNotNull(Index, "Index");
            var query = param.ProcessQuery(innerOccurance, Index);

            return(RunQuery(query, showAllVersions, sortField, reverse, start, end));
        }
        /// <summary>
        /// The process query.
        /// </summary>
        /// <param name="condition">
        /// The condition.
        /// </param>
        /// <param name="index">
        /// The index.
        /// </param>
        /// <returns>
        /// The <see cref="BooleanQuery"/>.
        /// </returns>
        public override Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var baseQuery = base.ProcessQuery(condition, index);

            var translator = new QueryTranslator(index);
            Assert.IsNotNull(translator, "translator");

            var fieldQuery = this.Partial ? QueryBuilder.BuildPartialFieldValueClause(index, this.FieldName, this.FieldValue) :
                                            QueryBuilder.BuildExactFieldValueClause(index, this.FieldName, this.FieldValue);

            if (baseQuery == null)
            {
                return fieldQuery;
            }

            if (baseQuery is BooleanQuery)
            {
                var booleanQuery = baseQuery as BooleanQuery;
                booleanQuery.Add(fieldQuery, translator.GetOccur(condition));
            }

            return baseQuery;
        }
示例#4
0
        /// <summary>
        /// The process query.
        /// </summary>
        /// <param name="condition">
        /// The condition.
        /// </param>
        /// <param name="index">
        /// The index.
        /// </param>
        /// <returns>
        /// The <see cref="BooleanQuery"/>.
        /// </returns>
        public override Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var baseQuery = base.ProcessQuery(condition, index);

            var translator = new QueryTranslator(index);

            Assert.IsNotNull(translator, "translator");

            var fieldQuery = this.Partial ? QueryBuilder.BuildPartialFieldValueClause(index, this.FieldName, this.FieldValue) :
                             QueryBuilder.BuildExactFieldValueClause(index, this.FieldName, this.FieldValue);

            if (baseQuery == null)
            {
                return(fieldQuery);
            }

            if (baseQuery is BooleanQuery)
            {
                var booleanQuery = baseQuery as BooleanQuery;
                booleanQuery.Add(fieldQuery, translator.GetOccur(condition));
            }

            return(baseQuery);
        }
        public static List <SkinnyItem> GetItems(string indexName,
                                                 string language,
                                                 string templateFilter,
                                                 string locationFilter,
                                                 string fullTextQuery,
                                                 List <NumericRangeSearchParam.NumericRangeField> ranges,
                                                 QueryOccurance occuranceTypeNumRanges = QueryOccurance.Must,
                                                 bool performSort     = false,
                                                 string sortFieldName = "",
                                                 bool reverse         = false)
        {
            var searchParam = new NumericRangeSearchParam
            {
                Database       = "web",
                Ranges         = ranges,
                LocationIds    = locationFilter,
                TemplateIds    = templateFilter,
                FullTextQuery  = fullTextQuery,
                InnerCondition = occuranceTypeNumRanges,
                Language       = language
            };

            using (var runner = new QueryRunner(indexName))
            {
                if (performSort)
                {
                    return(runner.GetItems(searchParam, sortField: sortFieldName, reverse: reverse));
                }
                else
                {
                    return(runner.GetItems(searchParam));
                }
            }
        }
示例#6
0
        protected void ApplyFullTextClause(CombinedQuery query, string searchText, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(searchText))
            {
                return;
            }

            query.Add(new FullTextQuery(searchText), occurance);
        }
        internal static void AddFieldValueClause(CombinedQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (fieldName.IsNullOrEmpty() || fieldValue.IsNullOrEmpty())
            {
                return;
            }

            fieldValue = IdHelper.ProcessGUIDs(fieldValue);
            query.Add(new FieldQuery(fieldName, fieldValue), occurance);
        }
示例#8
0
        protected void ApplyTemplateFilter(CombinedQuery query, string templateIds, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(templateIds))
            {
                return;
            }

            templateIds = IdHelper.NormalizeGuid(templateIds);
            var fieldQuery = new FieldQuery(BuiltinFields.Template, templateIds);

            query.Add(fieldQuery, occurance);
        }
        protected CombinedQuery ApplyRefinements(IEnumerable<Refinement> refinements, QueryOccurance occurance)
        {
            if (refinements.Count() <= 0) return new CombinedQuery();

             var innerQuery = new CombinedQuery();

             foreach (var refinement in refinements)
             {
            AddFieldValueClause(innerQuery, refinement.Name, refinement.Value, occurance);
             }

             return innerQuery;
        }
        internal static void AddFieldValueClause(BooleanQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (fieldName.IsNullOrEmpty() || fieldValue.IsNullOrEmpty())
            {
                return;
            }
            var globalBooleanQuery = new BooleanQuery();
            var qp = new QueryParser("__workflow state", ItemBucket.Kernel.Util.IndexSearcher.Index.Analyzer);
            qp.SetAllowLeadingWildcard(true);
            globalBooleanQuery.Add(qp.Parse(fieldValue), BooleanClause.Occur.MUST);

            query.Add(globalBooleanQuery, BooleanClause.Occur.MUST);
        }
示例#11
0
        public virtual BooleanClause.Occur GetOccur(QueryOccurance occurance)
        {
            switch (occurance)
            {
            case QueryOccurance.Must:
                return(BooleanClause.Occur.MUST);

            case QueryOccurance.MustNot:
                return(BooleanClause.Occur.MUST_NOT);

            case QueryOccurance.Should:
                return(BooleanClause.Occur.SHOULD);
            }
            throw new Exception("Unknown occurance");
        }
示例#12
0
        public virtual BooleanClause.Occur GetOccur(QueryOccurance occurance)
        {
            switch (occurance)
             {
            case QueryOccurance.Must:
               return BooleanClause.Occur.MUST;

            case QueryOccurance.MustNot:
               return BooleanClause.Occur.MUST_NOT;

            case QueryOccurance.Should:
               return BooleanClause.Occur.SHOULD;
             }
             throw new Exception("Unknown occurance");
        }
        protected void ApplyTemplateFilter(CombinedQuery query, string templateIds, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(templateIds))
            {
                return;
            }

            string field = BuiltinFields.Template;

            if (SearchBaseTemplates)
            {
                field = BuiltinFields.AllTemplates;
            }
            ApplyIdFilter(query, field, templateIds, occurance);
        }
        public override BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var query = base.ProcessQuery(occurance, index) ?? new BooleanQuery();

            if (Partial)
            {
                AddPartialFieldValueClause(index, query, FieldName, FieldValue);
            }
            else
            {
                AddExactFieldValueClause(index, query, FieldName, FieldValue);
            }

            return(query);
        }
        public override BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var query = base.ProcessQuery(occurance, index) ?? new BooleanQuery();

            if (Partial)
            {
                AddPartialFieldValueClause(index, query, FieldName, FieldValue);
            }
            else
            {
                AddExactFieldValueClause(index, query, FieldName, FieldValue);
            }

            return query;
        }
示例#16
0
        public override BooleanQuery ProcessQuery(QueryOccurance outerCondition, Index index)
        {
            var outerQuery = new BooleanQuery();

             var translator = new QueryTranslator(index);
             var innerOccurance = translator.GetOccur(InnerCondition);
             var outerOccurance = translator.GetOccur(outerCondition);

             var baseQuery = base.ProcessQuery(outerCondition, index);
             if (baseQuery != null && baseQuery.Clauses().Count > 0) outerQuery.Add(baseQuery, outerOccurance);

             var dateRangeQuery = ApplyDateRangeSearchParam(innerOccurance);

             if (dateRangeQuery != null) outerQuery.Add(dateRangeQuery, outerOccurance);

             return outerQuery;
        }
示例#17
0
        public virtual BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var innerQuery = new CombinedQuery();
            ApplyFullTextClause(innerQuery, FullTextQuery, occurance);
            ApplyRelationFilter(innerQuery, RelatedIds, occurance);
            ApplyTemplateFilter(innerQuery, TemplateIds, occurance);
            ApplyLocationFilter(innerQuery, LocationIds, occurance);
            AddFieldValueClause(innerQuery, BuiltinFields.Database, Database, occurance);

            if (innerQuery.Clauses.Count < 1)
                return null;

            var translator = new QueryTranslator(index);
            var booleanQuery = translator.ConvertCombinedQuery(innerQuery);

            ApplyLanguageClause(booleanQuery, Language, translator.GetOccur(occurance));

            return booleanQuery;
        }
        public override Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var translator = new QueryTranslator(index);
            Assert.IsNotNull(translator, "Query Translator");

            var baseQuery = base.ProcessQuery(condition, index) as BooleanQuery ?? new BooleanQuery();

            var outerCondition = translator.GetOccur(condition);

            var query = this.BuildQuery(translator.GetOccur(InnerCondition));
            if (query != null)
            {
                baseQuery.Add(query, outerCondition);
            }

            return baseQuery;
        }
        public virtual BooleanClause.Occur GetOccur(QueryOccurance occurance)
        {
            if (occurance == QueryOccurance.Must)
             {
            return BooleanClause.Occur.MUST;
             }

             if (occurance == QueryOccurance.MustNot)
             {
            return BooleanClause.Occur.MUST_NOT;
             }

             if (occurance == QueryOccurance.Should)
             {
            return BooleanClause.Occur.SHOULD;
             }

             throw new Exception("Unknown occurance");
        }
        public override BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var outerQuery = new BooleanQuery();

             var refinementQuery = ApplyRefinements(Refinements, InnerCondition);

             var translator = new QueryTranslator(index);
             var refBooleanQuery = translator.ConvertCombinedQuery(refinementQuery);
             var outerOccurance = translator.GetOccur(occurance);

             if (refBooleanQuery != null && refBooleanQuery.Clauses().Count > 0)
            outerQuery.Add(refBooleanQuery, outerOccurance);

             var baseQuery = base.ProcessQuery(occurance, index);
             if (baseQuery != null)
            outerQuery.Add(baseQuery, outerOccurance);

             return outerQuery;
        }
示例#21
0
        public virtual BooleanClause.Occur GetOccur(QueryOccurance occurance)
        {
            if (occurance == QueryOccurance.Must)
            {
                return(BooleanClause.Occur.MUST);
            }

            if (occurance == QueryOccurance.MustNot)
            {
                return(BooleanClause.Occur.MUST_NOT);
            }

            if (occurance == QueryOccurance.Should)
            {
                return(BooleanClause.Occur.SHOULD);
            }

            throw new Exception("Unknown occurance");
        }
        public override Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var translator = new QueryTranslator(index);

            Assert.IsNotNull(translator, "Query Translator");

            var baseQuery = base.ProcessQuery(condition, index) as BooleanQuery ?? new BooleanQuery();

            var outerCondition = translator.GetOccur(condition);

            var query = this.BuildQuery(translator.GetOccur(InnerCondition));

            if (query != null)
            {
                baseQuery.Add(query, outerCondition);
            }

            return(baseQuery);
        }
示例#23
0
        public virtual BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var innerQuery = new CombinedQuery();

            ApplyFullTextClause(innerQuery, FullTextQuery, occurance);
            ApplyRelationFilter(innerQuery, RelatedIds, occurance);
            ApplyTemplateFilter(innerQuery, TemplateIds, occurance);
            ApplyLocationFilter(innerQuery, LocationIds, occurance);
            AddFieldValueClause(innerQuery, BuiltinFields.Database, Database, occurance);

            if (innerQuery.Clauses.Count < 1)
            {
                return(null);
            }

            var translator   = new QueryTranslator(index);
            var booleanQuery = translator.ConvertCombinedQuery(innerQuery);

            ApplyLanguageClause(booleanQuery, Language, translator.GetOccur(occurance));

            return(booleanQuery);
        }
        public override BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var outerQuery = new BooleanQuery();

            var baseQuery      = base.ProcessQuery(occurance, index) ?? new BooleanQuery();
            var translator     = new QueryTranslator(index);
            var innerOccurance = translator.GetOccur(InnerCondition);
            var outerOccurance = translator.GetOccur(occurance);

            if (baseQuery.Clauses().Count > 0)
            {
                outerQuery.Add(baseQuery, outerOccurance);
            }

            var numericQuery = ApplyNumericRangeSearchParam(innerOccurance);

            if (numericQuery != null)
            {
                outerQuery.Add(numericQuery, outerOccurance);
            }

            return(outerQuery);
        }
示例#25
0
        /// <summary>
        /// The process query.
        /// </summary>
        /// <param name="condition">
        /// The condition.
        /// </param>
        /// <param name="index">
        /// The index.
        /// </param>
        /// <returns>
        /// The <see cref="BooleanQuery"/>.
        /// </returns>
        public virtual Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var translator = new QueryTranslator(index);

            Assert.IsNotNull(translator, "Query Translator");

            var templateFieldName = this.SearchBaseTemplates ? SearchFieldIDs.AllTemplates : BuiltinFields.Template;

            var queries = new List <Query>
            {
                QueryBuilder.BuildFullTextQuery(this.FullTextQuery, index),
                QueryBuilder.BuildRelationFilter(this.RelatedIds),
                QueryBuilder.BuildIdFilter(templateFieldName, this.TemplateIds),
                QueryBuilder.BuildLocationFilter(this.LocationIds),
                QueryBuilder.BuildFieldQuery(BuiltinFields.Database, this.Database),
                QueryBuilder.BuildLanguageQuery(this.Language)
            }
            .Where(q => q != null)
            .ToList();

            if (!queries.Any())
            {
                return(null);
            }

            var occur        = translator.GetOccur(condition);
            var booleanQuery = new BooleanQuery();

            foreach (var query in queries)
            {
                booleanQuery.Add(query, occur);
            }

            return(booleanQuery);
        }
示例#26
0
        public override BooleanQuery ProcessQuery(QueryOccurance occurance, Index index)
        {
            var outerQuery = new BooleanQuery();

            var refinementQuery = ApplyRefinements(Refinements, InnerCondition);

            var translator      = new QueryTranslator(index);
            var refBooleanQuery = translator.ConvertCombinedQuery(refinementQuery);
            var outerOccurance  = translator.GetOccur(occurance);

            if (refBooleanQuery != null && refBooleanQuery.Clauses().Count > 0)
            {
                outerQuery.Add(refBooleanQuery, outerOccurance);
            }

            var baseQuery = base.ProcessQuery(occurance, index);

            if (baseQuery != null)
            {
                outerQuery.Add(baseQuery, outerOccurance);
            }

            return(outerQuery);
        }
        public virtual List<SkinnyItem> GetItems(IEnumerable<SearchParam> parameters, QueryOccurance innerCondition, bool showAllVersions, string sortField, bool reverse, int start, int end, out int totalResults)
        {
            Sort sort = null;
            if (!string.IsNullOrEmpty(sortField.ToLowerInvariant()))
                sort = new Sort(new SortField(sortField, SortField.STRING, reverse));

            return GetItems(parameters, innerCondition, showAllVersions, sort, start, end, out totalResults);
        }
        public static List <SkinnyItem> GetItems(string indexName,
                                                 string language,
                                                 string templateFilter,
                                                 string locationFilter,
                                                 string fullTextQuery,
                                                 string relationFilter,
                                                 List <MultiFieldSearchParam.Refinement> refinements,
                                                 QueryOccurance occuranceTypeRefinements,
                                                 List <DateRangeSearchParam.DateRange> dateRanges,
                                                 QueryOccurance occuranceTypeDateRanges,
                                                 List <NumericRangeSearchParam.NumericRangeField> numRanges,
                                                 QueryOccurance occuranceTypeNumRanges,
                                                 string fieldName,
                                                 string fieldValue,
                                                 bool canBePartial,
                                                 bool performSort     = false,
                                                 string sortFieldName = "",
                                                 bool reverse         = false)
        {
            var searchParam = new SearchParam
            {
                Database      = "web",
                RelatedIds    = relationFilter,
                Language      = language,
                TemplateIds   = templateFilter,
                LocationIds   = locationFilter,
                FullTextQuery = fullTextQuery
            };

            var searchParamMultiField = new MultiFieldSearchParam
            {
                Refinements    = refinements,
                InnerCondition = occuranceTypeRefinements
            };

            var searchParamDate = new DateRangeSearchParam
            {
                Ranges         = dateRanges,
                InnerCondition = occuranceTypeDateRanges
            };

            var searchParamNum = new NumericRangeSearchParam
            {
                Ranges         = numRanges,
                InnerCondition = occuranceTypeNumRanges
            };

            var searchParamField = new FieldSearchParam
            {
                FieldName  = fieldName,
                FieldValue = fieldValue,
                Partial    = canBePartial
            };

            using (var runner = new QueryRunner(indexName))
            {
                if (performSort)
                {
                    return(runner.GetItems(new[] { searchParam, searchParamMultiField, searchParamDate, searchParamField, searchParamNum }, sortField: sortFieldName, reverse: reverse));
                }
                else
                {
                    return(runner.GetItems(new[] { searchParam, searchParamMultiField, searchParamDate, searchParamField, searchParamNum }));
                }
            }
        }
示例#29
0
        protected void ApplyRefinements(CombinedQuery query, SafeDictionary<string> refinements, QueryOccurance occurance)
        {
            if (refinements.Count <= 0) return;

             var innerQuery = new CombinedQuery();

             foreach (var refinement in refinements)
             {
            var fieldName = refinement.Key.ToLowerInvariant();
            var fieldValue = refinement.Value;
            AddFieldValueClause(innerQuery, fieldName, fieldValue, occurance);
             }

             query.Add(innerQuery, QueryOccurance.Must);
        }
示例#30
0
        protected void ApplyFullTextClause(CombinedQuery query, string searchText, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(searchText)) return;

            query.Add(new FullTextQuery(searchText), occurance);
        }
示例#31
0
 protected void ApplyLocationFilter(CombinedQuery query, string locationIds, QueryOccurance occurance)
 {
     ApplyIdFilter(query, BuiltinFields.Path, locationIds, occurance);
 }
示例#32
0
 public virtual List<SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerOccurance = QueryOccurance.Must, bool showAllVersions = false, string sortField = "", bool reverse = true, int start = 0, int end = 0)
 {
     Assert.IsNotNull(Index, "Index");
      var query = param.ProcessQuery(innerOccurance, Index);
      return RunQuery(query, showAllVersions, sortField, reverse, start, end);
 }
 public virtual List<SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerOccurance = QueryOccurance.Must, bool showAllVersions = false, string sortField = "", bool reverse = true, int start = 0, int end = 0)
 {
     int temp = 0;
     return GetItems(param, innerOccurance, showAllVersions, sortField, reverse, start, end, out temp);
 }
示例#34
0
        protected void AddFieldValueClause(CombinedQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(fieldName) || String.IsNullOrEmpty(fieldValue))
            {
                return;
            }

            // if we are searching by _id field, do not lowercase
            fieldValue = IdHelper.ProcessGUIDs(fieldValue);
            query.Add(new FieldQuery(fieldName.ToLowerInvariant(), fieldValue), occurance);
        }
示例#35
0
 public SearchParam()
 {
     Condition = QueryOccurance.Must;
 }
示例#36
0
 protected void ApplyLocationFilter(CombinedQuery query, string locationIds, QueryOccurance occurance)
 {
     ApplyIdFilter(query, BuiltinFields.Path, locationIds, occurance);
 }
示例#37
0
 protected void ApplyRelationFilter(CombinedQuery query, string ids, QueryOccurance occurance)
 {
     ApplyIdFilter(query, BuiltinFields.Links, ids, occurance);
 }
示例#38
0
        public virtual List <SkinnyItem> GetItems(IEnumerable <SearchParam> parameters, QueryOccurance innerCondition, bool showAllVersions, Sort sorter, int start, int end, out int totalResults)
        {
            Assert.IsNotNull(Index, "Index");

            var translator = new QueryTranslator(Index);
            var query      = new BooleanQuery();

            foreach (var parameter in parameters.Where(p => p != null))
            {
                var nestedQuery = parameter.ProcessQuery(parameter.Condition, Index);

                if (nestedQuery == null)
                {
                    continue;
                }

                if (nestedQuery is BooleanQuery)
                {
                    if ((nestedQuery as BooleanQuery).Clauses().Count == 0)
                    {
                        continue;
                    }
                }

                query.Add(nestedQuery, translator.GetOccur(parameter.Condition));
            }

            return(RunQuery(query, showAllVersions, sorter, start, end, out totalResults));
        }
示例#39
0
        protected void ApplyIdFilter(CombinedQuery query, string fieldName, string filter, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(fieldName) || String.IsNullOrEmpty(filter))
            {
                return;
            }

            var filterQuery = new CombinedQuery();

            var values = IdHelper.ParseId(filter);

            foreach (var value in values.Where(ID.IsID))
            {
                AddFieldValueClause(filterQuery, fieldName, value, QueryOccurance.Should);
            }

            query.Add(filterQuery, occurance);
        }
        /// <summary>
        /// Searches the with parameter occurrence.
        /// </summary>
        /// <param name="startLocationItem">The start location item.</param>
        /// <param name="refinements">The refinements.</param>
        /// <param name="hitCount">The hit count.</param>
        /// <param name="relatedIds">The related ids.</param>
        /// <param name="indexName">Name of the index.</param>
        /// <param name="text">The text.</param>
        /// <param name="templates">The templates.</param>
        /// <param name="location">The location.</param>
        /// <param name="language">The language.</param>
        /// <param name="id">The id.</param>
        /// <param name="sortField">The sort field.</param>
        /// <param name="sortDirection">The sort direction.</param>
        /// <param name="itemName">Name of the item.</param>
        /// <param name="startDate">The start date.</param>
        /// <param name="endDate">The end date.</param>
        /// <param name="numberOfItemsToReturn">The number of items to return.</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="customParametersOccurance">The custom parameters occurrence.</param>
        /// <returns></returns>
        public static IEnumerable<SitecoreItem> SearchWithParameterOccurance(
      Item startLocationItem,
      SafeDictionary<string> refinements,
      out int hitCount,
      string relatedIds = "",
      string indexName = "itembuckets_buckets",
      string text = "",
      string templates = "",
      string location = "",
      string language = "en",
      string id = "",
      string sortField = "",
      string sortDirection = "",
      string itemName = "",
      string startDate = "",
      string endDate = "",
      int numberOfItemsToReturn = 20,
      int pageNumber = 1,
      QueryOccurance customParametersOccurance = QueryOccurance.Must)
        {
            Contract.Requires(startLocationItem.IsNotNull());

              using (var searcher = new IndexSearcher(indexName))
              {
            DateRangeSearchParam dateSearchParam = GetFullParameters(
              startLocationItem,
              refinements,
              relatedIds,
              indexName = "itembuckets_buckets",
              text,
              templates,
              location,
              language,
              id,
              sortField,
              sortDirection,
              itemName,
              startDate,
              endDate,
              numberOfItemsToReturn,
              pageNumber,
              customParametersOccurance);
            if (dateSearchParam.IsNull())
            {
              hitCount = 0;
              return new List<SitecoreItem>();
            }
            return GetItemsFromSearcher(searcher, dateSearchParam, out hitCount);
              }
        }
示例#41
0
        public virtual List <SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerCondition = QueryOccurance.Must, bool showAllVersions = false, string sortField = "", bool reverse = true, int start = 0, int end = 0)
        {
            int temp;

            return(GetItems(param, innerCondition, showAllVersions, sortField, reverse, start, end, out temp));
        }
示例#42
0
        protected void ApplyTemplateFilter(CombinedQuery query, string templateIds, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(templateIds)) return;

            templateIds = IdHelper.NormalizeGuid(templateIds);
            var fieldQuery = new FieldQuery(BuiltinFields.Template, templateIds);
            query.Add(fieldQuery, occurance);
        }
示例#43
0
        protected void ApplyRefinements(CombinedQuery query, SafeDictionary <string> refinements, QueryOccurance occurance)
        {
            if (refinements.Count <= 0)
            {
                return;
            }

            var innerQuery = new CombinedQuery();

            foreach (var refinement in refinements)
            {
                var fieldName  = refinement.Key.ToLowerInvariant();
                var fieldValue = refinement.Value;
                AddFieldValueClause(innerQuery, fieldName, fieldValue, occurance);
            }

            query.Add(innerQuery, QueryOccurance.Must);
        }
        /// <summary>
        /// The process query.
        /// </summary>
        /// <param name="condition">
        /// The condition.
        /// </param>
        /// <param name="index">
        /// The index.
        /// </param>
        /// <returns>
        /// The <see cref="BooleanQuery"/>.
        /// </returns>
        public virtual Query ProcessQuery(QueryOccurance condition, Index index)
        {
            Assert.ArgumentNotNull(index, "Index");

            var translator = new QueryTranslator(index);
            Assert.IsNotNull(translator, "Query Translator");

            var templateFieldName = this.SearchBaseTemplates ? SearchFieldIDs.AllTemplates : BuiltinFields.Template;

            var queries = new List<Query>
                              {
                                  QueryBuilder.BuildFullTextQuery(this.FullTextQuery, index),
                                  QueryBuilder.BuildRelationFilter(this.RelatedIds),
                                  QueryBuilder.BuildIdFilter(templateFieldName, this.TemplateIds),
                                  QueryBuilder.BuildLocationFilter(this.LocationIds),
                                  QueryBuilder.BuildFieldQuery(BuiltinFields.Database, this.Database),
                                  QueryBuilder.BuildLanguageQuery(this.Language)
                              }
                              .Where(q => q != null)
                              .ToList();

            if (!queries.Any())
            {
                return null;
            }

            var occur = translator.GetOccur(condition);
            var booleanQuery = new BooleanQuery();
            foreach (var query in queries)
            {
                booleanQuery.Add(query, occur);
            }

            return booleanQuery;
        }
 public virtual List<SkinnyItem> GetItems(ISearchParam param, QueryOccurance innerOccurance, bool showAllVersions, string sortField, bool reverse, int start, int end, out int totalResults)
 {
     Assert.IsNotNull(Index, "Index");
     var query = param.ProcessQuery(innerOccurance, Index);
     return RunQuery(query, showAllVersions, sortField, reverse, start, end, out totalResults);
 }
        internal static void ApplyRefinements(CombinedQuery query, SafeDictionary <string> refinements, QueryOccurance occurance)
        {
            if (refinements.Count <= 0)
            {
                return;
            }


            var combinedQuery = new CombinedQuery();

            refinements.ForEach(refinement => AddFieldValueClause(combinedQuery, refinement.Key.ToLowerInvariant(), refinement.Key == "_tags" ? refinement.Value.Replace("_tags ", "") : refinement.Value, occurance));
            query.Add(combinedQuery, QueryOccurance.Must);
        }
示例#47
0
        protected void AddFieldValueClause(CombinedQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(fieldName) || String.IsNullOrEmpty(fieldValue)) return;

            // if we are searching by _id field, do not lowercase
            fieldValue = IdHelper.ProcessGUIDs(fieldValue);
            query.Add(new FieldQuery(fieldName.ToLowerInvariant(), fieldValue), occurance);
        }
        internal static void AddFieldValueClause(CombinedQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (fieldName.IsNullOrEmpty() || fieldValue.IsNullOrEmpty())
            {
                return;
            }

            fieldValue = IdHelper.ProcessGUIDs(fieldValue);
            query.Add(new FieldQuery(fieldName, fieldValue), occurance);
        }
示例#49
0
        protected void ApplyIdFilter(CombinedQuery query, string fieldName, string filter, QueryOccurance occurance)
        {
            if (String.IsNullOrEmpty(fieldName) || String.IsNullOrEmpty(filter)) return;

            var filterQuery = new CombinedQuery();

            var values = IdHelper.ParseId(filter);

            foreach (var value in values.Where(ID.IsID))
            {
                AddFieldValueClause(filterQuery, fieldName, value, QueryOccurance.Should);
            }

            query.Add(filterQuery, occurance);
        }
        internal static void AddFieldValueClause(BooleanQuery query, string fieldName, string fieldValue, QueryOccurance occurance)
        {
            if (fieldName.IsNullOrEmpty() || fieldValue.IsNullOrEmpty())
            {
                return;
            }
            var globalBooleanQuery = new BooleanQuery();
            var qp = new QueryParser("__workflow state", ItemBucket.Kernel.Util.IndexSearcher.Index.Analyzer);

            qp.SetAllowLeadingWildcard(true);
            globalBooleanQuery.Add(qp.Parse(fieldValue), BooleanClause.Occur.MUST);

            query.Add(globalBooleanQuery, BooleanClause.Occur.MUST);
        }
示例#51
0
 protected void ApplyRelationFilter(CombinedQuery query, string ids, QueryOccurance occurance)
 {
     ApplyIdFilter(query, BuiltinFields.Links, ids, occurance);
 }
        public virtual List<SkinnyItem> GetItems(IEnumerable<SearchParam> parameters, QueryOccurance innerCondition, bool showAllVersions, Sort sorter, int start, int end, out int totalResults)
        {
            Assert.IsNotNull(Index, "Index");

            var translator = new QueryTranslator(Index);
            var query = new BooleanQuery();
            foreach (var parameter in parameters.Where(p => p != null))
            {
                var nestedQuery = parameter.ProcessQuery(parameter.Condition, Index);

                if (nestedQuery == null)
                {
                    continue;
                }

                if (nestedQuery is BooleanQuery)
                {
                    if ((nestedQuery as BooleanQuery).Clauses().Count == 0)
                    {
                        continue;
                    }
                }

                query.Add(nestedQuery, translator.GetOccur(parameter.Condition));
            }

            return RunQuery(query, showAllVersions, sorter, start, end, out totalResults);
        }
示例#53
0
        public virtual List <SkinnyItem> GetItems(IEnumerable <SearchParam> parameters, QueryOccurance innerCondition, bool showAllVersions, string sortField, bool reverse, int start, int end, out int totalResults)
        {
            Sort sort = null;

            if (!string.IsNullOrEmpty(sortField))
            {
                sort = new Sort(new SortField(sortField.ToLowerInvariant(), SortField.STRING, reverse));
            }

            return(GetItems(parameters, innerCondition, showAllVersions, sort, start, end, out totalResults));
        }
        internal static void ApplyRefinements(CombinedQuery query, SafeDictionary<string> refinements, QueryOccurance occurance)
        {
            if (refinements.Count <= 0)
            {
                return;
            }

            var combinedQuery = new CombinedQuery();
            refinements.ForEach(refinement => AddFieldValueClause(combinedQuery, refinement.Key.ToLowerInvariant(), refinement.Key == "_tags" ? refinement.Value.Replace("_tags ", "") : refinement.Value, occurance));
            query.Add(combinedQuery, QueryOccurance.Must);
        }
示例#55
0
        protected CombinedQuery ApplyRefinements(IEnumerable <Refinement> refinements, QueryOccurance occurance)
        {
            if (refinements.Count() <= 0)
            {
                return(new CombinedQuery());
            }

            var innerQuery = new CombinedQuery();

            foreach (var refinement in refinements)
            {
                AddFieldValueClause(innerQuery, refinement.Name, refinement.Value, occurance);
            }

            return(innerQuery);
        }
        /// <summary>
        /// Gets the full parameters.
        /// </summary>
        /// <param name="startLocationItem">The start location item.</param>
        /// <param name="refinements">The refinements.</param>
        /// <param name="relatedIds">The related ids.</param>
        /// <param name="p">The p.</param>
        /// <param name="text">The text.</param>
        /// <param name="templates">The templates.</param>
        /// <param name="location">The location.</param>
        /// <param name="language">The language.</param>
        /// <param name="id">The id.</param>
        /// <param name="sortField">The sort field.</param>
        /// <param name="sortDirection">The sort direction.</param>
        /// <param name="itemName">Name of the item.</param>
        /// <param name="startDate">The start date.</param>
        /// <param name="endDate">The end date.</param>
        /// <param name="numberOfItemsToReturn">The number of items to return.</param>
        /// <param name="pageNumber">The page number.</param>
        /// <param name="customParametersOccurance">The custom parameters occurrence.</param>
        /// <returns>The date range search parameters.</returns>
        private static DateRangeSearchParam GetFullParameters(
      Item startLocationItem,
      SafeDictionary<string> refinements,
      string relatedIds,
      string p,
      string text,
      string templates,
      string location,
      string language,
      string id,
      string sortField,
      string sortDirection,
      string itemName,
      string startDate,
      string endDate,
      int numberOfItemsToReturn,
      int pageNumber,
      QueryOccurance customParametersOccurance)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");

              DateTime startDateOut;
              bool startFlag = true;
              if (!DateTime.TryParse(startDate, culture, DateTimeStyles.None, out startDateOut))
              {
            startDateOut = DateTime.Now;
            startFlag = false;
              }

              DateTime endDateOut;
              bool endFlag = true;
              if (!DateTime.TryParse(endDate, culture, DateTimeStyles.None, out endDateOut))
              {
            endDateOut = DateTime.Now.AddDays(1);
            endFlag = false;
              }

              if (startLocationItem.IsNull())
              {
            Log.Warn("You are trying to run an Search on an item that has a start location of null", null);
            return null;
              }

              var dateSearchParam = new DateRangeSearchParam
              {
            ItemName = itemName,
            FullTextQuery = text,
            RelatedIds = relatedIds,
            TemplateIds = templates,
            LocationIds = startLocationItem.ID.ToString(),
            Language = language,
            ID = id,
            SortDirection = sortDirection,
            SortByField = sortField,
            PageSize = numberOfItemsToReturn,
            PageNumber = pageNumber,
            Refinements = refinements,
            Occurance = customParametersOccurance
              };

              if (startFlag || endFlag)
              {
            dateSearchParam.Ranges = new List<DateRangeSearchParam.DateRangeField>
                                   {
                                     new DateRangeSearchParam.DateRangeField(
                                       SearchFieldIDs.CreatedDate,
                                       startDateOut,
                                       endDateOut)
                                       {
                                         InclusiveStart = true,
                                         InclusiveEnd = true
                                       }
                                   };
              }

              return dateSearchParam;
        }