public override RandomAccessFilter BuildRandomAccessOrFilter(string[] vals, Properties prop, bool isNot)
        {
            RandomAccessFilter filter = null;

            int[] indexes = FacetDataCache.Convert(_dataCache, vals);
            if (indexes.Length > 1)
            {
                return new FacetOrFilter(_dataCache, indexes, isNot);
            }
            else if (indexes.Length == 1)
            {
                filter = new FacetFilter(_dataCache, indexes[0]);
            }
            else
            {
                filter = EmptyFilter.GetInstance();
            }
            if (isNot)
            {
                filter = new RandomAccessNotFilter(filter);
            }
            return filter;
        }
        public virtual RandomAccessFilter BuildRandomAccessOrFilter(string[] vals, Properties prop, bool isNot)
        {
            List<RandomAccessFilter> filterList = new List<RandomAccessFilter>(vals.Length);

            foreach (string val in vals)
            {
                RandomAccessFilter f = BuildRandomAccessFilter(val, prop);
                if (f != null && !(f is EmptyFilter))
                {
                    filterList.Add(f);
                }
            }

            RandomAccessFilter finalFilter;
            if (filterList.Count == 0)
            {
                finalFilter = EmptyFilter.GetInstance();
            }
            else
            {
                finalFilter = new RandomAccessOrFilter(filterList);
            }

            if (isNot)
            {
                finalFilter = new RandomAccessNotFilter(finalFilter);
            }
            return finalFilter;
        }
 public override RandomAccessFilter BuildRandomAccessOrFilter(string[] vals, Properties prop, bool isNot)
 {
     if (vals.Length > 1)
     {
         return new FacetOrFilter(dataCache, ConvertIndexes(dataCache, vals), isNot);
     }
     else
     {
         RandomAccessFilter filter = BuildRandomAccessFilter(vals[0], prop);
         if (filter == null)
             return filter;
         if (isNot)
         {
             filter = new RandomAccessNotFilter(filter);
         }
         return filter;
     }
 }
 public override RandomAccessFilter BuildRandomAccessOrFilter(string[] vals, Properties prop, bool isNot)
 {
     if (vals.Length > 1)
     {
         int depth = GetDepth(prop);
         bool strict = IsStrict(prop);
         List<int> intSet = new List<int>();
         GetFilters(intSet, vals, depth, strict);
         if (intSet.Count > 0)
         {
             return new FacetOrFilter(dataCache, intSet.ToArray(), isNot);
         }
         else
         {
             if (isNot)
             {
                 return null;
             }
             else
             {
                 return EmptyFilter.GetInstance();
             }
         }
     }
     else
     {
         RandomAccessFilter f = BuildRandomAccessFilter(vals[0], prop);
         if (f == null)
             return f;
         if (isNot)
         {
             f = new RandomAccessNotFilter(f);
         }
         return f;
     }
 }