关注开源代码的实际应用
本文仅记录一些简单的使用方法,供初学者参考。[from:http://www.rainsts.net/article.asp?id=313]
Lucene.Net是一个性能很好的信息检索库(或者叫搜索引擎内核)。Lucene.Net提供一套完整的API供应用程序实现全文索引与精确查询功能。这里只描述最基本的应用:
- //state the file location of the index
- string indexFileLocation = @"C:\Index";
- Lucene.Net.Store.Directory dir =
- Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, true);
- //create an analyzer to process the text
- Lucene.Net.Analysis.Analyzer analyzer = new
- Lucene.Net.Analysis.Standard.StandardAnalyzer();
- //create the index writer with the directory and analyzer defined.
- Lucene.Net.Index.IndexWriter indexWriter = new
- Lucene.Net.Index.IndexWriter(dir, analyzer,
- /*true to create a new index*/ true);
- //create a document, add in a single field
- Lucene.Net.Documents.Document doc = new
- Lucene.Net.Documents.Document();
- Lucene.Net.Documents.Field fldContent =
- new Lucene.Net.Documents.Field("content",
- "The quick brown fox jumps over the lazy dog",
- Lucene.Net.Documents.Field.Store.YES,
- Lucene.Net.Documents.Field.Index.TOKENIZED,
- Lucene.Net.Documents.Field.TermVector.YES);
- doc.Add(fldContent);
- //write the document to the index
- indexWriter.AddDocument(doc);
- //optimize and close the writer
- indexWriter.Optimize();
- indexWriter.Close();
这里用到了5个主要类:Directory、Analyzer、IndexWriter、Document和Field。通过Directory 实例记录需要存储的索引;Analyzer用于分析目标文本;结合Directory与Analyzer创建IndexWriter实例;结合 Document实例与Field实例保存文档要被IndexWriter存储的内容。然后调用IndexWriter的Optimize方法与 Close方法。
1、Lucene.Net.Store.Directory - Directory代表目标索引目录。Lucene.Net中包含了两种实现:FSDirectory与RAMDirectory,分别将索引结果存放于 文件系统与内存。开发人员也可以通过继承Directory来实现自己的存储方法。
2、Lucene.Net.Analysis.Analyzer - Analyzer用于将文本分割成词语或词组,同时可去除多余的词语(比如英语里的and、a、the等等)。StandardAnalyzer实例化时 可传递要忽略的词语列表,如果传递的参数为空则使用Lucene.Net默认的设置。开发人员可通过继承Analyzer实现自己的文档索引方式。
3、Lucene.Net.Index.IndexWriter - 用于配合Analyzer将分析结果保存到Directory。
4、Lucene.Net.Docuemnts.Docuemnt - 用于代表一封EMail、或者一个网页、一篇文章等。
5、Lucene.Net.Documents.Field - Docement包含一个用于描述文档的Field列表。每个Field包括一个name与相应的value,其中value包含了可用于查询的文本。 Field.Store用于告诉IndexWriter将field的value保存到索引以便检索时取出。此外,Field.Index用于告诉 IndexWriter如何索引当前field,比如Field.Index.TOKENIZED表示将文本拆 分,Field.Index.UNTOKENIZED则相反。
- //state the file location of the index
- string indexFileLocation = @"C:\Index";
- Lucene.Net.Store.Directory dir =
- Lucene.Net.Store.FSDirectory.GetDirectory(indexFileLocation, true);
- //create an index searcher that will perform the search
- Lucene.Net.Search.IndexSearcher searcher = new
- Lucene.Net.Search.IndexSearcher(dir);
- //build a query object
- Lucene.Net.Index.Term searchTerm =
- new Lucene.Net.Index.Term("content", "fox");
- Lucene.Net.Search.Query query = new Lucene.Net.Search.TermQuery(searchTerm);
- //execute the query
- Lucene.Net.Search.Hits hits = searcher.Search(query);
- //iterate over the results.
- for (int i = 0; i < hits.Length(); i++)
- {
- Document doc = hits.Doc(i);
- string contentValue = doc.Get("content");
- Console.WriteLine(contentValue);
- }
涉及的类有:Directory、IndexSearch、Query、Hits、Term。其中Query有多种实现:TermQuery, BooleanQuery, PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery, FilteredQuery, 及 SpanQuery。Lucene.Net.Search.Hits用于表示查找的结果。