lucene.net mysql_Lucene.net 全文检索数据库

#define Search

usingLucene.Net.Analysis;usingLucene.Net.Analysis.Tokenattributes;usingLucene.Net.Documents;usingLucene.Net.Index;usingLucene.Net.QueryParsers;usingLucene.Net.Search;usingLucene.Net.Store;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text;usingTestApp.Bll;usingTestApp.Model;namespaceTestApp

{classProgram

{static voidMain()

{#if CreateIndexConsole.WriteLine("开始创建索引");var bll = newItemBll();

CreateIndex(bll.GetItemInfos());#endif

#if Search

#region 查词StringBuilder sb= newStringBuilder();//索引库目录

Lucene.Net.Store.Directory dir_search = FSDirectory.Open(new System.IO.DirectoryInfo("ItemIndexDir"), newNoLockFactory());

IndexReader reader= IndexReader.Open(dir_search, true);

IndexSearcher search= null;try{

search= newIndexSearcher(reader);

QueryParser parser= new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "ItemName", newPanGuAnalyzer());

Query query= parser.Parse(LuceneHelper.GetKeyWordSplid("甲醇"));//执行搜索,获取查询结果集对象

TopDocs ts = search.Search(query, null, 20000);///获取命中的文档信息对象

ScoreDoc[] docs =ts.ScoreDocs;

Console.WriteLine(docs.Length);for (int i = 0; i < docs.Length; i++)

{int docId =docs[i].Doc;

Document doc=search.Doc(docId);var id = doc.Get("id");

Console.WriteLine(id);var itemName = doc.Get("ItemName");

Console.WriteLine(itemName);var purity = doc.Get("Purity");

Console.WriteLine(purity);var size = doc.Get("Size");

Console.WriteLine(size);var unit = doc.Get("Unit");

Console.WriteLine(unit);var venderName = doc.Get("VenderName");

Console.WriteLine(venderName);

}

}catch(Exception ex)

{throw;

}finally{if (search != null)

search.Dispose();if (dir_search != null)

dir_search.Dispose();

}#endregion

#endif}//帮助类,对搜索的关键词进行分词

public static classLuceneHelper

{public static string GetKeyWordSplid(stringkeywords)

{

StringBuilder sb= newStringBuilder();

Analyzer analyzer= newPanGuAnalyzer();

TokenStream stream= analyzer.TokenStream(keywords, newStringReader(keywords));

ITermAttribute ita= null;bool hasNext =stream.IncrementToken();while(hasNext)

{

ita= stream.GetAttribute();

sb.Append(ita.Term+ " ");

hasNext=stream.IncrementToken();

}returnsb.ToString();

}

}///

///创建索引文件///

private static void CreateIndex(Listlist)

{

IndexWriter writer= null;

Analyzer analyzer= newPanGuAnalyzer();

Lucene.Net.Store.Directory dir= FSDirectory.Open(new System.IO.DirectoryInfo("ItemIndexDir"));int i = 0;try{IndexReader:对索引进行读取的类。

//该语句的作用:判断索引库文件夹是否存在以及索引特征文件是否存在。

bool isCreate = !IndexReader.IndexExists(dir);

writer= newIndexWriter(dir, analyzer, isCreate, IndexWriter.MaxFieldLength.UNLIMITED);//添加索引

foreach (var item inlist)

{

Document doc= newDocument();if (item.ItemId % 1000 == 0)

Console.WriteLine($"开始写入{item.ItemId}");

doc.Add(new Field("id", item.ItemId.ToString(), Field.Store.YES, Field.Index.ANALYZED));

i= 1;

doc.Add(new Field("ItemName", item.ItemName?.ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

i= 2;

doc.Add(new Field("Purity", item.Purity?.ToString(), Field.Store.YES, Field.Index.ANALYZED));

i= 3;

doc.Add(new Field("Size", item.Size.ToString(), Field.Store.YES, Field.Index.ANALYZED));

i= 4;

doc.Add(new Field("Unit", item.Unit?.ToString(), Field.Store.YES, Field.Index.ANALYZED));

i= 5;

doc.Add(new Field("VenderName", item.VenderName?.ToString(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));

i= 6;

doc.Add(new Field("Price", item.Price.ToString(), Field.Store.YES, Field.Index.ANALYZED));

i= 7;

writer.AddDocument(doc, analyzer);

}

writer.Optimize();

}catch(Exception ex)

{

Console.WriteLine(ex);

Console.WriteLine($"error step {i}");throw;

}finally{if (writer != null)

writer.Dispose();if (dir != null)

dir.Dispose();

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值