zoukankan      html  css  js  c++  java
  • 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搜索——创建索引

  • 相关阅读:
    vue form dynamic validator All In one
    TypeScript api response interface All In One
    closable VS closeable All In One
    macOS 如何开启 WiFi 热点 All In One
    vue css inline style All In One
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (下)
    牛腩新闻 59 整合添加新闻页 FreeTextBox 富文本编辑器,检测到有潜在危险的 Request.Form 值,DropDownList 的使用
    牛腩新闻 61尾声: error.aspx的使用 防止报错
    vs2010里面 新建网站里面的 asp.net网站 和 新建项目里面的 asp.net Web应用程序 的区别 (上)
    牛腩新闻 62:尾声续2 asp.net的编译和发布
  • 原文地址:https://www.cnblogs.com/joylee/p/1610757.html
Copyright © 2011-2022 走看看