Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <remarks></remarks>
        /// <seealso cref=""/>
        /// <param name="value"></param>
        /// <param name="filter"></param>
        /// <param name="searchType"></param>
        /// <param name="numberOfResults"></param>
        /// <returns></returns>
        public SearchModel GetTextBoxSearchValues(string value, string filter, string searchType, int numberOfResults)
        {
            if (searchType.Equals("basedon"))
            {
                getQueryFromCriteria(this.WorkingSearchModel.CriteriaComponent);
            }
            if (searchType.Equals("new"))
            {
                getQueryFromCriteria(new SearchCriteria());
            }

            // encoding special characters for lucene
            value = EncoderHelper.Encode(value);

            this.WorkingSearchModel.SearchComponent.TextBoxSearchValues = BexisIndexSearcher.doTextSearch(this.bexisSearching, filter, value);
            return(this.WorkingSearchModel);
        }
Пример #2
0
 /// <summary>
 ///
 /// </summary>
 /// <remarks></remarks>
 /// <seealso cref=""/>
 /// <param name="searchCriteria"></param>
 /// <return></return>
 private void getQueryFromCriteria(SearchCriteria searchCriteria)
 {
     if (searchCriteria.SearchCriteriaList.Count() > 0)
     {
         bexisSearching = new BooleanQuery();
         foreach (SearchCriterion sco in searchCriteria.SearchCriteriaList)
         {
             if (sco.Values.Count > 0)
             {
                 if (sco.SearchComponent.Type.Equals(SearchComponentBaseType.General))
                 {
                     String       fieldName             = sco.SearchComponent.Name;
                     BooleanQuery bexisSearchingGeneral = new BooleanQuery();
                     foreach (String value in sco.Values)
                     {
                         String encodedValue = value;
                         Query  query        = new TermQuery(new Term(fieldName, encodedValue));
                         bexisSearchingGeneral.Add(query, Occur.SHOULD);
                     }
                     ((BooleanQuery)bexisSearching).Add(bexisSearchingGeneral, Occur.MUST);
                 }
                 else if (sco.SearchComponent.Type.Equals(SearchComponentBaseType.Category))
                 {
                     BooleanQuery bexisSearchingCategory = new BooleanQuery();
                     String       fieldName = "category_" + sco.SearchComponent.Name;
                     QueryParser  parser;
                     if (fieldName.ToLower().Equals("category_all"))
                     {
                         List <string> temp2 = BexisIndexSearcher.getCategoryFields().ToList();
                         temp2.AddRange(BexisIndexSearcher.getStoredFields().ToList());
                         temp2.Add("ng_all");
                         parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, temp2.ToArray(), new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));
                     }
                     else
                     {
                         parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, fieldName, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30));
                     }
                     foreach (String value in sco.Values)
                     {
                         String encodedValue = EncoderHelper.Encode(value);
                         String newString    = null;
                         //string value = val.Replace(")", "").Replace("(", "");
                         char[]   delimiter = new char[] { ';', ' ', ',', '!', '.' };
                         string[] parts     = encodedValue.ToLower().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
                         for (int i = 0; i < parts.Length; i++)
                         {
                             newString = newString + " " + parts[i] + "~0.6";
                         }
                         parser.PhraseSlop      = 5;
                         parser.DefaultOperator = QueryParser.AND_OPERATOR;
                         string query_value = encodedValue;
                         if (encodedValue.Equals(""))
                         {
                             query_value = "*:*";
                         }
                         Query query = parser.Parse(query_value);
                         bexisSearchingCategory.Add(query, Occur.SHOULD);
                     }
                     ((BooleanQuery)bexisSearching).Add(bexisSearchingCategory, Occur.MUST);
                 }
                 else if (sco.SearchComponent.Type.Equals(SearchComponentBaseType.Facet))
                 {
                     String       fieldName           = "facet_" + sco.SearchComponent.Name;
                     BooleanQuery bexisSearchingFacet = new BooleanQuery();
                     foreach (String value in sco.Values)
                     {
                         String encodedValue = value;
                         Query  query        = new TermQuery(new Term(fieldName, encodedValue));
                         bexisSearchingFacet.Add(query, Occur.SHOULD);
                     }
                     ((BooleanQuery)bexisSearching).Add(bexisSearchingFacet, Occur.MUST);
                 }
                 else if (sco.SearchComponent.Type.Equals(SearchComponentBaseType.Property))
                 {
                     String   fieldName = "property_" + sco.SearchComponent.Name;
                     Property pp        = (Property)sco.SearchComponent;
                     if (pp.UIComponent.ToLower().Equals("range"))
                     {
                         fieldName = "property_numeric_" + sco.SearchComponent.Name;
                         DateTime dd = new DateTime(Int32.Parse(sco.Values[0]), 1, 1, 1, 1, 1);
                         if (pp.Direction == Direction.increase)
                         {
                             NumericRangeQuery <long> dateRangeQuery = NumericRangeQuery.NewLongRange(fieldName, dd.Ticks, long.MaxValue, true, true);
                             ((BooleanQuery)bexisSearching).Add(dateRangeQuery, Occur.MUST);
                         }
                         else
                         {
                             NumericRangeQuery <long> dateRangeQuery = NumericRangeQuery.NewLongRange(fieldName, long.MinValue, dd.Ticks, true, true);
                             ((BooleanQuery)bexisSearching).Add(dateRangeQuery, Occur.MUST);
                         }
                     }
                     else
                     {
                         BooleanQuery bexisSearchingProperty = new BooleanQuery();
                         foreach (String value in sco.Values)
                         {
                             if (value.ToLower().Equals("all"))
                             {
                                 Query query = new MatchAllDocsQuery();
                                 bexisSearchingProperty.Add(query, Occur.SHOULD);
                             }
                             else
                             {
                                 String encodedValue = value;
                                 if (SearchConfig.getNumericProperties().Contains(sco.SearchComponent.Name.ToLower()))
                                 {
                                 }
                                 else
                                 {
                                     Query query = new TermQuery(new Term(fieldName, encodedValue));
                                     bexisSearchingProperty.Add(query, Occur.SHOULD);
                                 }
                             }
                         }
                         ((BooleanQuery)bexisSearching).Add(bexisSearchingProperty, Occur.MUST);
                     }
                 }
             }
             else
             {
                 //do nothing yet
             }
         }
     }
     else
     {
         using (var sa = new SimpleAnalyzer())
         {
             QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "id", sa);
             bexisSearching = parser.Parse("*:*");
         }
     }
 }