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; }
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()); }
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()); } }
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); }
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; }
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; }