예제 #1
0
        /// <summary>
        /// Filters documents that have fields that match any of the provided terms (not analyzed).
        /// </summary>
        public FilterContainer Terms(string field, IEnumerable <string> terms, TermsExecution?Execution = null)
        {
            ITermsFilter filter = new TermsFilterDescriptor();

            filter.Field     = field;
            filter.Terms     = terms ?? Enumerable.Empty <string>();
            filter.Execution = Execution;
            return(this.New(filter, f => f.Terms = filter));
        }
예제 #2
0
        /// <summary>
        /// Filters documents that have fields that match any of the provided terms (not analyzed).
        /// </summary>
        public FilterContainer Terms <K>(Expression <Func <T, K> > fieldDescriptor, IEnumerable <K> terms, TermsExecution?Execution = null)
        {
            ITermsFilter filter = new TermsFilterDescriptor();

            filter.Field     = fieldDescriptor;
            filter.Terms     = (terms != null) ? terms.Cast <object>() : null;
            filter.Execution = Execution;
            return(this.New(filter, f => f.Terms = filter));
        }
예제 #3
0
        /// <summary>
        /// Filters documents that have fields that match any of the provided terms (not analyzed).
        /// </summary>
        public FilterContainer Terms(Expression <Func <T, object> > fieldDescriptor, IEnumerable <string> terms, TermsExecution?Execution = null)
        {
            ITermsFilter filter = new TermsFilterDescriptor();

            filter.Field     = fieldDescriptor;
            filter.Terms     = terms;
            filter.Execution = Execution;
            return(this.New(filter, f => f.Terms = filter));
        }
		public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			var j = JObject.Load(reader);
			if (j == null || !j.HasValues)
				return null;

			string cacheKey = null, cacheName = null, field = null, execution = null;
			bool? cache = null;
			ITermsBaseFilter filter = null;
			foreach (var jv in j)
			{
				switch (jv.Key)
				{
					case "execution":
						execution = jv.Value.Value<string>();
						break;
					case "_cache":
						cache = jv.Value.Value<bool>();
						break;
					case "_cache_key":
						cacheKey = jv.Value.Value<string>();
						break;
					case "_name":
						cacheName = jv.Value.Value<string>();
						break;
					default:
						field = jv.Key;
						
						if (jv.Value.Type == JTokenType.Array)
						{
							ITermsFilter f = new TermsFilterDescriptor();
							f.Terms = jv.Value.Values<string>();
							filter = f;
						}
						else 
						{
							ITermsLookupFilter f = new TermsLookupFilterDescriptor();
							var id = jv.Value["id"];
							var index = jv.Value["index"];
							var type = jv.Value["type"];
							var path = jv.Value["path"];

							if (id != null) f.Id = id.Value<string>();
							if (index != null) f.Index = index.Value<string>();
							if (type != null) f.Type = type.Value<string>();
							if (path != null) f.Path = path.Value<string>();
							filter = f;
						}
						break;
				}
			}
			if (filter == null) return null;
			if (execution != null)
				filter.Execution = execution.ToEnum<TermsExecution>();
			filter.Field = field;
			filter.Cache = cache;
			filter.CacheKey = cacheKey;
			filter.FilterName = cacheName;
			return filter;

		}