Пример #1
0
        public List<SearchRecord> ExecuteFastSearch(QueryInfo info, out Query query, out Dictionary<string,List<int>> statistics, bool highlight)
        {
            List<SearchRecord> recordList;
            Utils.SearchUtil.SetSearchSettings(sourceList, indexList,fileSet, dictSet, searchd);
            Utils.SearchUtil.SetQueryInfo(info);
            if (highlight)
            {
                recordList = Utils.SearchUtil.HighLightSearch(out query);
                if (string.IsNullOrEmpty(info.IndexNames))
                {
                    recordList.AddRange(Utils.SearchUtil.HighLightSearchFile());
                }
            }
            else
            {
                recordList = Utils.SearchUtil.SearchEx(out query);
                if (string.IsNullOrEmpty(info.IndexNames))
                {
                    recordList.AddRange(Utils.SearchUtil.SearchFile());
                }
            }
            Reverser<SearchRecord> reverser = new Reverser<SearchRecord>("ISUtils.Common.SearchRecord", "Score", ReverserInfo.Direction.DESC);
            recordList.Sort(reverser);
            SearchRecord.Direction = ReverserInfo.Direction.DESC;
            statistics = new Dictionary<string, List<int>>();
            for (int i=0; i<recordList.Count; i++)
            {
                if (statistics.ContainsKey(recordList[i].Caption))
                {
                    statistics[recordList[i].Caption].Add(i);
                }
                else
                {
                    List<int> posList=new List<int>();
                    posList.Add(i);
                    statistics.Add(recordList[i].Caption, posList);
                }

            }
            return recordList;
        }
Пример #2
0
        static void testSearch()
        {
            string path = @"d:\Indexer\config.xml";
            SearchMaker searcher = new SearchMaker(path);
            QueryInfo info = new QueryInfo();
            info.IndexNames = "Recource_LA_PCXXB";
            info.SearchWords = "东丽区2004年第十三批农用地转用";
            //info.FilterList.Add(new FilterCondition("","JSDW", "东丽"));
            //info.ExcludeList.Add(new ExcludeCondition("", "JSDW", "国家"));
            //info.RangeList.Add(new RangeCondition("","KGSJ","20000501","20090702"));
            SearchInfo si=new SearchInfo();
            //si.Query =info;
            //FileStream fs = new FileStream(@"F:\search.xml", FileMode.Open);

            //System.Xml.Serialization.XmlSerializer xsr = new XmlSerializer(typeof(SearchInfo));
            ////xsr.Serialize(fs,si);
            //si = (SearchInfo)xsr.Deserialize(fs);
            //fs.Close();
            //Console.WriteLine(si.ToString());
            DateTime start = DateTime.Now;
            Query query;
            Dictionary<string, int> statis;
            //List<SearchRecord> results = searcher.ExecuteFastSearch(info, out query, true);
            List<SearchRecord> results = searcher.ExecutePageSearch(info, out query, out statis,"",10,1, true);
            //Console.WriteLine(query.ToString());
            //SearchResult sr = new SearchResult();
            //sr.PageNum = 1;
            //sr.TotalPages = 1;
            //sr.Docs.AddRange(results);
            //System.Xml.XmlWriter writer = new System.Xml.XmlTextWriter(@"F:\result.xml", null);
            //FileStream fs = new FileStream(@"F:\result.xml", FileMode.Append);

            //System.Xml.Serialization.XmlSerializer xsr = new XmlSerializer(typeof(SearchResult));
            //xsr.Serialize(fs,sr);
            //fs.Close();
            //FileStream fs = new FileStream(@"F:\result.xml", FileMode.Open);
            
            //System.Xml.Serialization.XmlSerializer xsr = new XmlSerializer(typeof(SearchResult));
            //sr=(SearchResult)xsr.Deserialize(fs);
            //fs.Close();
            //Console.WriteLine(sr.ToString());

            //writer.Close();
            //TimeSpan span = DateTime.Now - start;
            //Console.WriteLine(string.Format("Spend {0} ", span.ToString()));
            ////ISUtils.SupportClass.Result.Output(result);
            int i = 0;
            foreach (SearchRecord doc in results)
            {
                i++;
                System.Xml.Serialization.XmlSerializer xsr = new XmlSerializer(typeof(SearchRecord));
                FileStream writer = new FileStream(@"F:\test.xml", FileMode.Create);

                xsr.Serialize(writer, doc);
                writer.Close();
                foreach (SearchField field in doc.Fields)
                {
                    string key = field.Name;
                    string value = field.Value;
                    Console.WriteLine(key + ":\t" + value);
                }
                Console.WriteLine("--------------------------------");
            }
            Console.WriteLine("count="+results.Count.ToString());
        }
Пример #3
0
 static void TestChineseSearch()
 {
     string path = @"d:\Indexer\config.conf";
     try
     {
         List<Source> sourceList;
         List<IndexSet> indexList;
         DictionarySet dictSet;
         SearchSet searchd;
         Config parser = new Config(path,false);
         searchd = parser.GetSearchd();
         sourceList = parser.GetSourceList();
         indexList = parser.GetIndexList();
         dictSet = parser.GetDictionarySet();
         QueryInfo info = new QueryInfo();
         info.IndexNames = "in_main1,in_main2";
         info.SearchWords = "中国人民解放军 93688";
         Console.WriteLine("SetSearchSettings");
         ISUtils.Utils.SearchUtil.SetSearchSettings(sourceList, indexList, dictSet, searchd);
         Console.WriteLine("SetQueryInfo");
         ISUtils.Utils.SearchUtil.SetQueryInfo(info);
         Console.WriteLine("UseDefaultChineseAnalyzer");
         //ISUtils.Utils.SearchUtil.UseDefaultChineseAnalyzer(true);
         //List<QueryResult.SearchInfo> qrsiList;
         Console.WriteLine("Search");
         //IndexSearcher searcher = new IndexSearcher(@"E:\TEMP\in_MAIN1\");
         ////TDZL,QSXZ,SYQLX,SYQR,LZDDH
         //QueryParser queryParser = new QueryParser("LZDDH", new ChineseAnalyzer());
         //Query query = queryParser.Parse("中国人民解放军 93688");
         ////输出我们要查看的表达式
         //Console.WriteLine(query.ToString());
         DateTime start = DateTime.Now;
         //Hits hits = searcher.Search(query);
         Hits hits = ISUtils.Utils.SearchUtil.Search();
         TimeSpan tm = DateTime.Now - start;
         for (int i = 0; i < hits.Length(); i++)
         {
             Document doc = hits.Doc(i);
             Console.WriteLine(doc.ToString());
             //Console.WriteLine(string.Format("title:{0} \nhistoryName:{1}", doc.Get("id"), doc.Get("historyName")));
         }
         Console.WriteLine(hits.Length());
         Console.WriteLine("搜索测试完成,花费时间:" + tm.TotalMilliseconds.ToString() + "毫秒");
         //List<Hits> hitsList = ISUtils.Utils.SearchUtil.Search(out qrsiList);
         //QueryResult result = new QueryResult();
         //Console.WriteLine("AddResult");
         //result.AddResult(qrsiList, hitsList, searchd.MaxMatches);
         //Console.WriteLine("Output");
         //foreach (QueryResult.SearchInfo si in result.docs.Keys)
         //{
         //    Console.WriteLine("index :" + si.IndexName);
         //    foreach (QueryResult.ExDocument ed in result.docs[si])
         //    {
         //        Console.Write("Score=" + ed.score.ToString());
         //        foreach (string s in si.Fields)
         //        {
         //            Console.Write("\t" + ed.doc.Get(s));
         //        }
         //        Console.WriteLine();
         //        //Response.Write(ISUtils.SupportClass.Document.ToString(ed.doc)+ "<br>");
         //        //Console.WriteLine(string.Format("title:{0} \nhistoryName:{1}", doc.Get("id"), doc.Get("historyName")));
         //    }
         //}
         Console.WriteLine("Finish!");
     }
     catch (Exception e)
     {
         Console.WriteLine(e.StackTrace.ToString());
     }
 }
Пример #4
0
 public static void SetQueryInfo(QueryInfo info)
 {
     SetSearchIndexes(info.IndexNames);
     SetSearchWords(info.WordsAllContains, info.ExactPhraseContain, info.OneOfWordsAtLeastContain, info.WordNotInclude);
     SetSearchLimit(info.QueryAts);
     SetFilters(info.FilterList);
     SetExcludes(info.ExcludeList);
     SetRanges(info.RangeList);
 }
Пример #5
0
 public List<SearchRecord> ExecutePageSearch(QueryInfo info, out Query query, out Dictionary<string, int> statistics,string filter,int pageSize,int pageNum, bool highlight)
 {
     List<SearchRecord> recordList;
     Utils.SearchUtil.SetSearchSettings(sourceList, indexList, fileSet, dictSet, searchd);
     Utils.SearchUtil.SetQueryInfo(info);
     List<string> filterList=null;
     bool fileInclude=false;
     if (string.IsNullOrEmpty(info.IndexNames))
     {
         fileInclude=true;
     }
     filterList=new List<string>();
     string[] filters=SupportClass.String.Split(filter,",;");
     filterList.AddRange(filters);
     recordList = Utils.SearchUtil.SearchPage(out query,out statistics,filterList,pageSize,pageNum,fileInclude,highlight);
     return recordList;
 }
Пример #6
0
 public List<SearchRecord> ExecuteFastSearch(QueryInfo info, out Dictionary<string,List<int>> statistics, bool highlight)
 {
     List<SearchRecord> recordList;
     Utils.SearchUtil.SetSearchSettings(sourceList, indexList, dictSet, searchd);
     Utils.SearchUtil.SetQueryInfo(info);
     if (highlight)
     {
         recordList = Utils.SearchUtil.HighLightSearch(out statistics);
     }
     else
     {
         recordList = Utils.SearchUtil.SearchEx(out statistics);
     }
     return recordList;
 }