lucene.net使用プロセス
0、何がluceneですか?
luceneは作業員が使うAPIで、sorのように持ってきたくないです。直接運行できます。luceneは今多くの言語を支持しています。Java、C〓、perlなどです。この文章はluceneの使用手順をc萶で説明します。luceneの使用は大きく分けると、索引を作成し、検索し、検索する。
1、インデックスの作成
2、検索検索
luceneは作業員が使うAPIで、sorのように持ってきたくないです。直接運行できます。luceneは今多くの言語を支持しています。Java、C〓、perlなどです。この文章はluceneの使用手順をc萶で説明します。luceneの使用は大きく分けると、索引を作成し、検索し、検索する。
1、インデックスの作成
Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_CURRENT); Directory directory = FSDirectory.GetDirectory(@"D:\project\index", false); // true: false: //Directory directory = new RAMDirectory();// , , , 。 //D:\project\index IndexWriter iwriter = new IndexWriter(directory, analyzer, true, new IndexWriter.MaxFieldLength(25000)); string strdir = "D:\\project\\test007";
//D:\\project\\test007 DirectoryInfo dir = new DirectoryInfo(strdir);
if (dir.Exists)
{
FileInfo[] files = dir.GetFiles();
for (int i = 0; i < files.Length; i++)
{
if (files[i].Exists)
{
Console.WriteLine("path : " + files[i].FullName);
Document doc = new Document();
// Document , string strLine;
FileStream aFile = files[i].OpenRead();
StreamReader sr = new StreamReader(aFile);
strLine = sr.ReadLine();
char[] sepratorrr = { '\t' };
// : name\t lily // content\t i am a boy.(and so on) while (strLine !=null)
{
if (strLine == "")
{
strLine = sr.ReadLine();
continue;
}
string[] mywords = strLine.Split(sepratorrr);
Console.WriteLine(" filename :" + mywords[0] + " value : " + mywords[1]);
if (mywords[0] == "time"||mywords[0]=="fans")
{
Console.WriteLine("time flied");
doc.Add(new Field(mywords[0], mywords[1], Field.Store.YES, Field.Index.UN_TOKENIZED));
//time fans }
else
{
doc.Add(new Field(mywords[0], mywords[1], Field.Store.YES, Field.Index.ANALYZED));
// }
strLine = sr.ReadLine();
}
iwriter.AddDocument(doc);
// doc
}
else
{
Console.WriteLine("file is not exit: " + files[i].FullName);
}
}
Console.WriteLine(dir + " open sucessfully");
}
else
Console.WriteLine(dir + " the dir is not exits");
//=============================================================================
iwriter.Optimize();
iwriter.Close();
2、検索検索
IndexSearcher isearcher = new IndexSearcher(directory, true); // read-only=true
Console.Write("inter a serch key word : ");
string key = Console.ReadLine();
if (key != null)
{
BooleanClause.Occur[] flags = new BooleanClause.Occur[] {
BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
Query query = MultiFieldQueryParser.Parse(key,new string[]{"name","content"},flags,analyzer);
SortField[] sortOrder = { new SortField("time", true), new SortField("fans", SortField.LONG, true) }; //
Sort sort = new Sort(sortOrder);//, SortField.STRING
Hits hits = isearcher.Search(query, sort);
// Hits hits = isearcher.Search(query);
Console.WriteLine(" {0} ", hits.Length());
for (int i = 0; i < hits.Length(); i++)
{
// Document hitDoc = isearcher.Doc(i);//handwriting error for my 1 day to debug
Document hitDoc = hits.Doc(i);
Console.Write(hitDoc.Get("name") + " " + hitDoc.Get("fans") + " " + hitDoc.Get("gender") + " " + hitDoc.Get("time"));
Console.WriteLine(hitDoc.Get("content"));
}
}
isearcher.Close();