Exemplo n.º 1
0
 /// <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);
 }
Exemplo n.º 2
0
 /// <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;
                 }
             }
         }
     }
 }