📄 index.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Lucene.Net.Index;
using Lucene.Net.Documents;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Search;
using Lucene.Net.QueryParsers;
using Lucene.Net.Analysis;
using Lucene.Net.Highlight;
using SimpleSearch.News;
namespace SimpleSearch
{
class Index
{
public static String INDEX_DIR = @"News";
private static IndexWriter writer = null;
public static int MaxMergeFactor
{
get
{
if (writer != null)
{
return writer.GetMergeFactor();
}
else
{
return 0;
}
}
set
{
if (writer != null)
{
writer.SetMergeFactor(value);
}
}
}
public static int MaxMergeDocs
{
get
{
if (writer != null)
{
return writer.GetMaxMergeDocs();
}
else
{
return 0;
}
}
set
{
if (writer != null)
{
writer.SetMaxMergeDocs(value);
}
}
}
public static int MinMergeDocs
{
get
{
if (writer != null)
{
return writer.GetMaxBufferedDocs();
}
else
{
return 0;
}
}
set
{
if (writer != null)
{
writer.SetMaxBufferedDocs(value);
}
}
}
public static void CreateIndex(String indexDir)
{
try
{
writer = new IndexWriter(indexDir, new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer(), false);
}
catch
{
writer = new IndexWriter(indexDir, new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer(), true);
}
//writer.Optimize();
//writer.Close();
}
public static void Rebuild(String indexDir)
{
writer = new IndexWriter(indexDir, new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer(), true);
writer.Optimize();
writer.Close();
}
public static int IndexString(String indexDir, string url, string title, DateTime time, string content)
{
//IndexWriter writer = new IndexWriter(indexDir, new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer(), false);
Document doc = new Document();
Field field = new Field("url", url, Field.Store.YES, Field.Index.NO);
doc.Add(field);
field = new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED);
doc.Add(field);
field = new Field("time", time.ToString("yyyyMMdd"), Field.Store.YES, Field.Index.UN_TOKENIZED);
doc.Add(field);
field = new Field("contents", content, Field.Store.YES, Field.Index.TOKENIZED);
doc.Add(field);
writer.AddDocument(doc);
int num = writer.DocCount();
//writer.Optimize();
//writer.Close();
return num;
}
public static void Close()
{
writer.Optimize();
writer.Close();
}
public static List<TNews> Search(String indexDir, String q)
{
IndexSearcher search = new IndexSearcher(indexDir);
QueryParser queryParser = new QueryParser("contents", new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer());
Query query = queryParser.Parse(q);
Hits hits = search.Search(query);
List<TNews> result = new List<TNews>();
for (int i = 0; i < hits.Length(); i++)
{
try
{
TNews news = new TNews();
news.Title = hits.Doc(i).Get("title");
news.Content = hits.Doc(i).Get("contents");
news.Url = hits.Doc(i).Get("url");
String strTime = hits.Doc(i).Get("time");
news.Time = DateTime.ParseExact(strTime, "yyyyMMdd", null);
// 高亮显示设置
//TermQuery tQuery = new TermQuery(new Term("contents", q));
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>");
Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query));
//关键内容显示大小设置
highlighter.SetTextFragmenter(new SimpleFragmenter(50));
//取出高亮显示内容
Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer analyzer = new Lucene.Net.Analysis.KTDictSeg.KTDictSegAnalyzer();
TokenStream tokenStream = analyzer.TokenStream("contents", new StringReader(news.Content));
news.Abstract = highlighter.GetBestFragment(tokenStream, news.Content);
result.Add(news);
}
catch(Exception e)
{
}
}
search.Close();
return result;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -