/// <summary> /// �������ڡ��������ķ��� /// </summary> private void search() { DateTime start = DateTime.Now; //try //{ // } //catch (Exception e) //{ // Response.Write("<script type='text/javascript'>window.alert(' " + e.ToString() + " ');</script>"); //} // �������� //�������ڡ�index��Ŀ¼�� string indexDirectory1 = Server.MapPath("./")+"index\\1.5\\"; IndexSearcher searcher1 = new IndexSearcher(indexDirectory1); string indexDirectory2 = Server.MapPath("./") + "index\\1.4\\"; IndexSearcher searcher2 = new IndexSearcher(indexDirectory2); //System.String index3 = @"\\192.168.1.130\index\1.5"; //Lucene.Net.Index.IndexReader reader3; Lucene.Net.Search.ParallelMultiSearcher searcher; /* if (System.IO.Directory.Exists(index3))//�Ƿ����Ŀ¼ { reader3 = Lucene.Net.Index.IndexReader.Open(index3);//��ȡ������ȡ����ʵ�����ô�Ϊ������ȡ��reader��ȡ�ļ���Ϊindex���ļ���(Ŀ¼) IndexSearcher searcher3 = new IndexSearcher(reader3); searcher = new Lucene.Net.Search.ParallelMultiSearcher(new Lucene.Net.Search.Searchable[] { searcher3,searcher1, searcher2 }); } else { searcher = new Lucene.Net.Search.ParallelMultiSearcher(new Lucene.Net.Search.Searchable[] { searcher1, searcher2 }); }*/ searcher = new Lucene.Net.Search.ParallelMultiSearcher(new Lucene.Net.Search.Searchable[] { searcher1, searcher2 }); //====================>(1)�����ѯ����<============================================== //System.String field = "text";//���ڱ�����ҳɹ����ļ����ڵ�Ŀ¼ //QueryParser parser = new QueryParser(field, new StandardAnalyzer());//������ѯ��������ָ����field(������ָcontents��Ŀ¼), analyzer������������ //====================>(2)�����ѯ����<============================================== string[] strs = new string[] { "text", "path","fullpath","keywords","description","title" }; Lucene.Net.QueryParsers.QueryParser parser = new Lucene.Net.QueryParsers.MultiFieldQueryParser(strs, new StandardAnalyzer()); parser.SetDefaultOperator(Lucene.Net.QueryParsers.QueryParser.OR_OPERATOR); // ��������� this.Results.Columns.Add("link", typeof(string)); this.Results.Columns.Add("title", typeof(string)); this.Results.Columns.Add("sample", typeof(string)); this.Results.Columns.Add("path", typeof(string)); // ���� Query query = parser.Parse(this.Query);//����һ����ѯ����ָ����ѯ����Query_condition������ this.Query_txt.Text�� Hits hits = searcher.Search(query); this.total = hits.Length(); // ���� �����Ĺؼ���,Ĭ����<b>..</b> // �����ָ��<read>..</read> SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<B style='color:Red;'>", "</B>"); Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query)); // ���һ�������Ҫ���صģ����������ݳ��� // ���̫С����ֻ�����ݵĿ�ʼ���ֱ��������������ҷ��ص�����Ҳ�� ̫����ʱ̫�˷��ˡ� highlighter.SetTextFragmenter(new SimpleFragmenter(100)); // initialize startAt this.startAt = initStartAt(); // ��ʾ�������ġ������Ŀ int resultsCount = smallerOf(total, this.maxResults + this.startAt); for (int i = startAt; i < resultsCount; i++) { // �õ����е��ĵ� Document doc = hits.Doc(i); //��ӽ�β����֤��β������Ų������� string title = doc.Get("title") + " "; // �õ��ļ����� System.String text =Search.CutString( doc.Get("text"),480); // �õ��ļ�������ȷ·�� string path = doc.Get("path"); string orpath = doc.Get("fullpath"); Lucene.Net.Analysis.TokenStream titkeStream = analyzer.TokenStream("title", new System.IO.StringReader(title));//��Ŀ Lucene.Net.Analysis.TokenStream tokenStream = analyzer.TokenStream("text", new System.IO.StringReader(text));//ժҪ Lucene.Net.Analysis.TokenStream pathStream = analyzer.TokenStream("path", new System.IO.StringReader(path));//��ʾ��·�� System.String result = highlighter.GetBestFragments(tokenStream, text, 2, "..."); string tresult = highlighter.GetBestFragments(titkeStream, title, 2, ".."); string pathwords = highlighter.GetBestFragments(pathStream, path, 2, ".."); //·����ʱ��ʾ // ����һ������ʾ�������Ľ�� DataRow row = this.Results.NewRow(); if (tresult == "") { row["title"] = title; } else { row["title"] = tresult; } if (getpath(row, System.IO.Path.GetFileName(path.Replace("\\", "/")))) { row["link"]=getFullpath( System.IO.Path.GetFileName(doc.Get("path"))); } else { row["link"] =orpath; if (pathwords=="") { row["path"] = orpath; } else { row["path"] = pathwords.Replace("\\", "/"); } } if (result == ""){ row["sample"] = text; } else { row["sample"] = result; } this.Results.Rows.Add(row); } searcher.Close(); // �����Ϣ this.duration = DateTime.Now - start; this.fromItem = startAt + 1; this.toItem = smallerOf(startAt + maxResults, total); }