• Lucene.net搜索——初识lucene


    Lucene.net是什么??
    Lucene是一个开源的全文检索工具包,使用java实现。从2000年开始,Doug Cutting把lucene放到SourceForge上供人随意下载,到了2001年,Apache自由软件联盟将其收入,成为他的一个子项目。
    Lucene.net是lucene的.net版本,为.net开发人员提供API。Lucene.net 起初是一个开源项目然后转向商业化,我们可以在网上找到早些的版本,是开源免费的,已经可以满足大部分的搜索需求。

    Lucene.net能做什么?
    lucene可以搭建搜索引擎,但要做成一个baidu、google是不太现实的,但是作为一个开源的、高效的、可扩展的全文索引API,在日常的开发中也是常常需要用到的。
    Lucene.net是基于文本的搜索,与基于数据的搜索有很大的不同,更加灵活高效。我们先看下在博客园找找看中搜索“lucene”产生的结果(http://zzk.cnblogs.com/s?w=lucene&t=),下面是截图

     09112404
    很容易发现这样的搜索相对而言是相对准确的,前几页的内容和我们搜索的关键字联系比较紧密,到20页以后我们就发现基本不是我们想找的内容。这样的搜索结果好像有点baidu和google的影子了。
    (1)lucene.net的搜索结果更精确。数据库的搜索结果只能根据某几个字段来排序,但我们无法按我们搜索结果的匹配度来排序。lucene.net内部有自己的排序规则,有自己的匹配度算法,lucene.net就能解决这一的问题。
    (2)lucene.net的搜索速度更快。基于文件的搜索,减少数据库的压力。lucene.net也有自己的缓存和优化方式。
    (3)使用简单.

    Lucene.net如何做??
    其实Lucene.net的工作流程很简单,三个步骤:
    (1)建立索引
    (2)搜索
    (3)输出结果

    lucene.net实际上是把你要搜索的内容(word/数据库/pdf)等内容建立成索引,存储到索引的文件夹,然后所有的搜索都是针对该文件夹的相关内容进行操作,我们不需要生成索引的具体内容是什么,我只需要知道怎么使用这些所以即可。
    那么具体是怎么来操作呢?现在做个Demo演示。

    新建一个站点,添加BIN目录和应用lucene的DLL,新建文件夹indexdir,用来存放索引文件。

    09112402

    建立索引  

    1/// <summary>
    2/// 建立索引
    3/// </summary>
    4/// <param name="content">建立索引的内容(需要被搜索的内容)</param>

    5protected void CreateIndex(string content)
    6{
    7    IndexWriter indexwrite = new IndexWriter(indexpath,new StandardAnalyzer(),false);//索引文件存储的路径
    8    indexwrite.SetUseCompoundFile(false);
    9    Document doc = new Document();
    10    doc.Add(new Field("title", content, Field.Store.YES, Field.Index.TOKENIZED));
    11    indexwrite.AddDocument(doc);
    12    indexwrite.Close();
    13}
    1protected void btnCreateindex_Click(object sender, EventArgs e)
    2   {
    3       //为索引添加多个内容
    4       CreateIndex("这是一个测试的程序");
    5       CreateIndex("这是一个关于搜索测试的程序");
    6       CreateIndex("这是一个lucene测试的程序");
    7       CreateIndex("这是一个在博客园测试的程序");
    8       CreateIndex("这是一个简单测试的程序");
    9       lbmsg.Text = "索引添加成功";
    10   }
     
    11
    12 
    13

    建立完索引后会发现索引的文件夹多几个文件,这几个文件的作用以后会讲述,这里我们只要知道索引已经建立就可以了

    09112403

    进行搜索  

    1protected void Search()
    2   {
    3       //清空以前输入内容,方便查看
    4       lbmsg.Text = "";
    5
    6       //搜索
    7       IndexSearcher search = new IndexSearcher(indexpath);
    8       TermQuery q = new TermQuery(new Term("title", txtkeyword.Text));
    9       Hits hits = search.Search(q);
    10       for (int i = 0; i < hits.Length(); i++)
    11       {
    12           Document doc = hits.Doc(i);
    13           lbmsg.Text+= doc.Get("title")+"<br/>";
    14       }

    15   }

    16   protected void btnSearch_Click(object sender, EventArgs e)
    17   {
    18       Search();
    19   }
     
    20
    21 
    22

    这只是一个最简单的Demo,下篇将详细介绍建立索引

    附上源码 https://files.cnblogs.com/joylee/lucenedemo1.rar

       

    Lucene学习资源:

    Lucene.net下载:http://www.cnblogs.com/birdshover/archive/2008/08/26/1277019.html
    Birdshover的BLOG  http://www.cnblogs.com/birdshover/category/152283.html

    下一篇:Lucene.net搜索——创建索引

  • 相关阅读:
    BZOJ1930 [Shoi2003]pacman 吃豆豆
    hdu5322 Hope
    hdu5390 tree
    hdu4609 3-idiots
    hdu5354 Bipartite Graph
    hdu4918 Query on the subtree
    hdu5314 Happy King
    [题解] PowerOJ 1741 最长递增子序列问题 (最大流)
    [题解] PowerOJ 1740 圆桌问题 (最大流)
    [题解] PowerOJ 1739 魔术球问题 (最大流)
  • 原文地址:https://www.cnblogs.com/joylee/p/1610757.html
Copyright © 2020-2023  润新知