首页 > 养蜂技术 > 软件开发 > 其他

养蜂技术正文

.Net环境下的Lucene搜索工具使用方法

湖北天马养蜂场2010-03-08 11:10:14其他2079
本文仅记录一些简单的使用方法,供初学者参考。
以下例子采用Lucene.NET1.9版本,可取去Lucene.Net下载。

1.基本应用
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingLucene.Net;
usingLucene.Net.Analysis;
usingLucene.Net.Analysis.Standard;
usingLucene.Net.Documents;
usingLucene.Net.Index;
usingLucene.Net.QueryParsers;
usingLucene.Net.Search;
usingLucene.Net.Store;
usingLucene.Net.Util;

namespaceConsoleApplication1.Lucene
{
  publicclassLuceneTest
  {
    privateconststringFieldName="name";
    privateconststringFieldValue="value";

    privateDirectorydirectory=newRAMDirectory();
    privateAnalyzeranalyzer=newStandardAnalyzer();

    publicLuceneTest()
    {
    }

    privatevoidIndex()
    {
      IndexWriterwriter=newIndexWriter(directory,analyzer,true);
      writer.maxFieldLength=1000;
      
      for(inti=1;i<=100;i++)
      {
        Documentdocument=newDocument();

        document.Add(newField(FieldName,"name"+i,Field.Store.YES,Field.Index.UN_TOKENIZED));
        document.Add(newField(FieldValue,"Hello,World!",Field.Store.YES,Field.Index.TOKENIZED));

        writer.AddDocument(document);
      }

      writer.Optimize();
      writer.Close();
    }

    privatevoidSearch()
    {
      Queryquery=QueryParser.Parse("name*",FieldName,analyzer);

      IndexSearchersearcher=newIndexSearcher(directory);

      Hitshits=searcher.Search(query);
      
      Console.WriteLine("符合条件记录:{0};索引库记录总数:{1}",hits.Length(),searcher.Reader.NumDocs());
      for(inti=0;i<hits.Length();i++)
      {
        intdocId=hits.Id(i);
        stringname=hits.Doc(i).Get(FieldName);
        stringvalue=hits.Doc(i).Get(FieldValue);
        floatscore=hits.Score(i);

        Console.WriteLine("{0}:DocId:{1};Name:{2};Value:{3};Score:{4}",
          i+1,docId,name,value,score);
      }

      searcher.Close();
    }
  }
}