/// <summary> /// Create a completion suggestor with fuzzy functionality. /// </summary> /// <param name="suggestName">The name of the suggestor.</param> /// <param name="field">The field to find suggestions in.</param> /// <param name="fuzzy">The fuzzy completion values. A default value is acceptable.</param> public CompletionSuggester(string suggestName, string field, FuzzyCompletion fuzzy) : base(suggestName, field) { if (fuzzy == null) throw new ArgumentNullException("fuzzy", "CompletionSuggestor requires a fuzzy value in this constructor."); Fuzzy = fuzzy; }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Dictionary<string, object> wholeDict = serializer.Deserialize<Dictionary<string, object>>(reader); Dictionary<string, object> suggestDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(wholeDict.First().Value.ToString()); Dictionary<string, object> compDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(suggestDict.GetString(SuggestTypeEnum.Completion.ToString())); FuzzyCompletion fuzzy = null; if (compDict.ContainsKey(_FUZZY)) { Dictionary<string, object> fuzzyDict = null; try { fuzzyDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(compDict.GetString(_FUZZY)); } catch { } if (fuzzyDict != null) { fuzzy = new FuzzyCompletion(); if (fuzzyDict.ContainsKey(_FUZZINESS)) fuzzy.Fuzziness = fuzzyDict[_FUZZINESS]; else fuzzy.Fuzziness = _FUZZINESS_DEFAULT; fuzzy.IsUnicodeAware = fuzzyDict.GetBool(_IS_UNICODE_AWARE, _IS_UNICODE_AWARE_DEFAULT); fuzzy.MinimumLength = fuzzyDict.GetInt32(_MINIMUM_LENGTH, _MINIMUM_LENGTH_DEFAULT); fuzzy.PrefixLength = fuzzyDict.GetInt32(_PREFIX_LENGTH, _PREFIX_LENGTH_DEFAULT); fuzzy.Transpositions = fuzzyDict.GetBool(_TRANSPOSITIONS, _TRANSPOSITIONS_DEFAULT); } else if(compDict.GetBool(_FUZZY)) { fuzzy = new FuzzyCompletion(); } } CompletionSuggester suggestor = null; if(fuzzy == null) suggestor = new CompletionSuggester(wholeDict.First().Key, compDict.GetString(SuggestSerializer._FIELD)); else suggestor = new CompletionSuggester(wholeDict.First().Key, compDict.GetString(SuggestSerializer._FIELD), fuzzy); suggestor.Size = compDict.GetInt32(SuggestSerializer._SIZE, SuggestSerializer._SIZE_DEFAULT); suggestor.Text = suggestDict.GetStringOrDefault(SuggestSerializer._TEXT); return suggestor; }