protected void BtnTable_Click(object sender, EventArgs e)
{
string queryString ="select top " + txttoprow.Value + " projectname,_city from project";
System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
using (SqlConnection connection =
new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[MyConst.connectionStr].ConnectionString))
{
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
IDataRecord record = null;
// Call Read before accessing data.
while (reader.Read())
{
stopwatch.Start();
record = (IDataRecord)reader;
SearchFromIndexData(record[0].ToString(), record[1].ToString());
}
// Call Close when done reading.
reader.Close();
}
stopwatch.Stop();
//停止监视
TimeSpan timeSpan = stopwatch.Elapsed;
//获取总时间
double hours = timeSpan.TotalHours;
//小时
double minutes = timeSpan.TotalMinutes;
//分钟
double seconds = timeSpan.TotalSeconds;
//秒数
lbltime.Text = (timeSpan.TotalMilliseconds / 1000).ToString(); // 毫秒数
}
protected void BtnSearch_Click(object sender, EventArgs e)
{
SearchFromIndexData(txtSplit.Value.ToString(), txtCity.Value.ToString());
}
protected string LuceneIndexPath()
{
//INDEX_STORE_PATH 为索引存储目录
return Server.MapPath("LuceneIndex");
}
//建立索引
public IndexWriter CreateIndex()
{
IndexWriter writer = null;
try
{
if (System.IO.Directory.Exists(LuceneIndexPath()))
{
System.IO.Directory.Delete(LuceneIndexPath(), true);
}
writer = new IndexWriter(FSDirectory.Open(LuceneIndexPath()), new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED);
int i = 0;
if (!int.TryParse(txtSelectCount.Value, out i))
{
Response.Write("<script>alert('建立索引行数不正确!')</script>");
}
DataTable dt = MySQLHelp.ExecuteSet("select top " + txtSelectCount.Value + " projectname,_city from project").Tables[0];
for (int j = 0; j < dt.Rows.Count; j++)
{
Document document = new Document();
document.Add(new Field("projectname", dt.Rows[j]["projectname"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
document.Add(new Field("city", dt.Rows[j]["_city"].ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.AddDocument(document);
}
writer.Optimize();
writer.Dispose();
lblCreatResult.Text = "建立索引成功";
}
catch (Exception e)
{
lblCreatResult.Text = e.ToString();
}
return writer;
}
/// <summary>
/// 从索引库中检索关键字
/// </summary>
private void SearchFromIndexData(string projectname, string city)
{
var ver = Lucene.Net.Util.Version.LUCENE_30;
Directory indexDirectory = FSDirectory.Open(new System.IO.DirectoryInfo(LuceneIndexPath()));
Analyzer analyzer = new StandardAnalyzer(ver);
IndexSearcher searcher = null;
//List<Article> list;
int recCount = 0;
try
{
searcher = new IndexSearcher(indexDirectory, true);
BooleanQuery booleanQuery = new BooleanQuery();
//MultiFieldQueryParser parser = new MultiFieldQueryParser(ver, new string[] { "projectname", "city" }, analyzer);
//Query query = parser.Parse(word);
//PhraseQuery query = new PhraseQuery();
//query.Add(new Term("projectname", word));
Query queryprojectname = new QueryParser(ver, "projectname", analyzer).Parse(projectname);
Query querycity = new QueryParser(ver, "city", analyzer).Parse(city);
booleanQuery.Add(queryprojectname, Occur.MUST);
booleanQuery.Add(querycity, Occur.MUST);
TopDocs ts = searcher.Search(booleanQuery, null, 10000);//执行搜索,获取查询结果集对象
recCount = ts.TotalHits;//获取命中的文档个数
ScoreDoc[] hits = ts.ScoreDocs;//获取命中的文档信息对象
foreach (var item in hits)
{
namelist.Add(searcher.Doc(item.Doc).Get("projectname"));
}
}
catch (Exception)
{
throw;
}
finally
{
if (searcher != null)
{
searcher.Dispose();
}
}
}
public static string[] SplitWords(string content)
{
List<string> strList = new List<string>();
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30);
TokenStream tokenStream = analyzer.TokenStream("", new System.IO.StringReader(content));
Lucene.Net.Analysis.Token token = null;
//Token t = ts.next();
while (tokenStream.IncrementToken())
{
AttributeSource.State ta = tokenStream.CaptureState();
}
return strList.ToArray();
}