/// <summary> /// 线程参数 /// </summary> /// <param name="searcher">绑定结果池的分词搜索器</param> /// <param name="checkLessWord">未匹配分词自定义过滤处理</param> /// <param name="checkLess">未匹配分词自定义过滤处理</param> public ThreadParameter(StaticSearcher <keyType> searcher, CheckLessWord checkLessWord = null, CheckLess checkLess = null) { this.searcher = searcher; this.checkLessWord = checkLessWord; wordQuery = new WordQuery(searcher); queue = new Queue(searcher); }
/// <summary> /// 获取搜索数据标识集合(记录未匹配分词) /// </summary> /// <param name="text">搜索关键字</param> /// <param name="maxSize">关键字最大字符长度</param> /// <param name="isKey">数据标识过滤</param> /// <returns>数据标识集合</returns> public IEnumerable <keyType> SearchLess(string text, int maxSize, CheckLess isKey) { Simplified.Set(text, maxSize, true); if (Simplified.Size != 0) { queryResult.Length = 0; wordQuery.Get(ref Simplified, MatchType.Less, ref queryResult, ref lessWords); if (queryResult.Length > 0 && (lessWords.Length == 0 || checkLessWord(ref lessWords))) { if (queryResult.Length == 1) { foreach (KeyValuePair <keyType, ResultIndexArray> result in queryResult[0].Value.Dictionary) { if (isKey(result.Key, ref lessWords)) { yield return(result.Key); } } } else { Dictionary <keyType, ResultIndexArray> resultDictionary = sortResultLess(); IEnumerable <keyType> keys; if (resultDictionary != null) { keys = resultDictionary.Keys; } else { getLessKeys(); keys = weights.Keys; } KeyValue <HashString, QueryResult>[] resultArray = queryResult.Array; foreach (keyType key in keys) { int count = queryResult.Length, lessWordCount = 0; foreach (KeyValue <HashString, QueryResult> result in resultArray) { if (!result.Value.Dictionary.ContainsKey(key)) { if (result.Key.String.Length != 1) { break; } lessWords.Add(result.Key.String); ++lessWordCount; } if (--count == 0) { if (isKey(key, ref lessWords)) { yield return(key); } break; } } lessWords.Length -= lessWordCount; } } } } }