Lucene.net搜索——创建索引

介绍lucene的索引工具前我先介绍两个重要的非常重要的类:Document和Field。

Document和真实存在硬盘中的文件是没有任何关系的,它只是向Lucene提供原始的要索引的文件的内容,也是就索引的操作都是基于Document来操作的。

我个人有个不太恰当但是非常好记忆的方法,把Document当作一个数据库,而其中的Field当作是数据中的某个字段。

现在有个商品管理系统,存放商品的名称,价格,发布时间,详情等,那么我们的Document的应该如下建立:
    

  Document doc = new Document();
  doc.Add(new Field("goodsname", content, Field.Store.YES, Field.Index.TOKENIZED));
  doc.Add(new Field("createdate", content, Field.Store.YES, Field.Index.TOKENIZED));
  doc.Add(new Field("price", content, Field.Store.YES, Field.Index.TOKENIZED));
  doc.Add(new Field("detail", content, Field.Store.YES, Field.Index.TOKENIZED));
 

对于上面这段代码我主要看Document的操作,主要是Field类。

new Field("goodsname", content, Field.Store.YES, Field.Index.TOKENIZED)

四个参数的意思分别是:field的名称,添加到Field的详细内容,是否存储,是否分词

为了提高运行的速度,我们就不需要对商品的发布时间和价格进行分词,不需要存储商品的详情。

经过上面的一个步骤我们就可以理解为我现在建了一个数据库,就是我上面的doc,这个数据库中存放了以下的几个字段goodsname,createdate,price,detail。

 

索引的格式我们通过Document建立好,那么我们怎么来建立我们的索引呢,这就用到我们非常重要的一个工具IndexWriter.

IndexWriter作用:创建索引、合并索引、控制索引相关的各方面。

我们先看下IndexWriter的构造函数

 

public IndexWriter(Directory d, Analyzer a);
public IndexWriter(FileInfo path, Analyzer a);
public IndexWriter(string path, Analyzer a);
public IndexWriter(Directory d, Analyzer a, bool create);
public IndexWriter(Directory d, bool autoCommit, Analyzer a);
public IndexWriter(FileInfo path, Analyzer a, bool create);
public IndexWriter(string path, Analyzer a, bool create);
public IndexWriter(Directory d, bool autoCommit, Analyzer a, bool create);
public IndexWriter(Directory d, bool autoCommit, Analyzer a, IndexDeletionPolicy deletionPolicy);
public IndexWriter(Directory d, bool autoCommit, Analyzer a, bool create, IndexDeletionPolicy deletionPolicy);
 

其中第一个参数都是表示索引存放的位置,这个容易理解。

Analyzer表示用哪个分词类来建立索引,bool create表示是否要重新建立索引,一般情况下第一次建立索引的时候为True,追加建立索引的时候为False.

初始化索引以后我们要向索引中添加Document,用到的方法是

public virtual void AddDocument(Document doc);

Document表示我们刚才建立的文档。

 

完整的代码

   /**
   /// 索引文件存放路径
   ///
   protected string indexpath = HttpContext.Current.Server.MapPath("/indexdir/");
   /**
   /// 建立索引
   ///
   /// 建立索引的内容(需要被搜索的内容)
   protected void CreateIndex(string title,string createdate,string price,string detail)
   {
       IndexWriter indexwrite = new IndexWriter(indexpath,new StandardAnalyzer());//索引文件存储的路径
       Document doc = new Document();
       doc.Add(new Field("goodsname", title, Field.Store.YES, Field.Index.TOKENIZED));
       doc.Add(new Field("createdate", createdate, Field.Store.YES, Field.Index.TOKENIZED));
       doc.Add(new Field("price", price, Field.Store.YES, Field.Index.TOKENIZED));
       doc.Add(new Field("detail", detail, Field.Store.YES, Field.Index.TOKENIZED));
       indexwrite.AddDocument(doc);
       indexwrite.Close();
   }
   protected void btnCreateindex_Click(object sender, EventArgs e)
   {
       //为索引添加多个内容
       CreateIndex("诺基亚手机","2009-11-24","2100","这里是诺基亚手机的详细内容");
       CreateIndex("笔记本电脑", "2009-11-24", "2100", "这里是笔记本电脑的详细内容");
       CreateIndex("最新PSP", "2009-11-24", "2100", "这里是psp内容");
       lbmsg.Text = "索引添加成功";
   }

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-620629/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-620629/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值