今天从网上找了一些关于Lucene.NET的资料,自己做个demo测试了一下。

Lucene.NET 是开源的项目,从网上很容易找到源代码,新建一个web测试页面和一个控制台程序,控制台程序用来创建lucene的索引

控制台代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Analysis;
using Lucene.Net.Index;
using Lucene.Net.Documents;
using System.IO;
using Lucene.Net.Analysis.Cn;
using Lucene.Net.Analysis.CJK;
using System.Data.SqlClient;
using System.Data;
namespace Test
{
    class TokenizerTest
    {
        public static string connstr = "server=.;database=test;uid=sa;pwd=";

public static SqlConnection mycon;
        static void Main(string[] args)
        {
            SqlDataReader myred = OpenTable();

IndexWriter writer = CreateIndex(myred);
            Console.WriteLine("索引创建完成");
            Console.Read();
        }
        public static SqlDataReader OpenTable()
        {

mycon = new SqlConnection(connstr);
            mycon.Open();
            SqlCommand mycom = new SqlCommand("select * from Article", mycon);
            DataTable tb = new DataTable();
            SqlDataAdapter adp = new SqlDataAdapter(mycom);
            adp.Fill(tb);
            DataTable d = tb;
            return mycom.ExecuteReader();

}

//对数据库中的字段建立索引

public static IndexWriter CreateIndex(SqlDataReader myred)
        {

IndexWriter writer = new IndexWriter("D:/index/", new ChineseAnalyzer(), true);   //索引的存储位置

try
            {

while (myred.Read())
                {

Document doc = new Document();

doc.Add(new Field("id", myred["id"].ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));

doc.Add(new Field("title", myred["title"].ToString(), Field.Store.YES, Field.Index.TOKENIZED));

doc.Add(new Field("summary", myred["summary"].ToString(), Field.Store.YES, Field.Index.TOKENIZED));

writer.AddDocument(doc);

}

writer.Optimize(); //优化索引

writer.Close();

myred.Close();

}

catch (Exception e)
            {

//Response.Write(e);

myred.Close();

}

return writer;

}
    }

}

创建好索引之后,就可以使用了测试页面代码:

protected void Search_Click(object sender, EventArgs e)
    {
        DataRow dr;
        DataTable luctb = new DataTable();
        luctb.Columns.Add("id");
        luctb.Columns.Add("title");
        luctb.Columns.Add("summary");
        Stopwatch sw = new Stopwatch();
        sw.Start();
        Hits myhit = seacher(this.tj.Text.Trim());

for (int i = 0; i < myhit.Length(); i++)
        {

Document doc = myhit.Doc(i);

dr = luctb.NewRow();

dr[0] = doc.Get("id").ToString();

dr[1] = doc.Get("title").ToString();

dr[2] = doc.Get("summary").ToString();

luctb.Rows.Add(dr);

dr.AcceptChanges();

}
        sw.Stop();
        this.Label1.Text = "共" + luctb.Rows.Count + "行" + sw.ElapsedMilliseconds.ToString();
        this.gview.DataSource = luctb;

this.gview.DataBind();
        DataTable sqltb = new DataTable();

mycon = new SqlConnection(connstr);
        mycon.Open();
        Stopwatch swsql = new Stopwatch();
        swsql.Start();
        SqlCommand mycom = new SqlCommand(string.Format("select Id,title,summary from Article where summary like '%{0}%' or title like '%{0}%'", this.tj.Text.Trim()), mycon);
        DataTable tb = new DataTable();
        SqlDataAdapter adp = new SqlDataAdapter(mycom);
        adp.Fill(tb);
        swsql.Stop();
        this.Label2.Text = "共" + tb.Rows.Count + "行" + swsql.ElapsedMilliseconds.ToString();
        this.gviewsql.DataSource = tb;

this.gviewsql.DataBind();

}

代码中分别利用lucene和sql语句从Article查询title和summary两个字段中包含要查询字符的记录。表中共20w+条数据,

测试结果:lucene耗时:共35行16毫秒sql耗时:共35行2331毫秒

转载于:https://www.cnblogs.com/dlz1123/archive/2011/02/24/1963996.html

Lucene.NET入门实例相关推荐

  1. Lucene 02 - Lucene的入门程序(Java API的简单使用)

    目录 1 准备环境 2 准备数据 3 创建工程 3.1 创建Maven Project(打包方式选jar即可) 3.2 配置pom.xml, 导入依赖 4 编写基础代码 4.1 编写图书POJO 4. ...

  2. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  3. SpringMVC 框架系列之初识与入门实例

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Co ...

  4. 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...

    本节书摘来自异步社区<HFSS电磁仿真设计从入门到精通>一书中的第2章,作者 易迪拓培训 , 李明洋 , 刘敏,更多章节内容可以访问云栖社区"异步社区"公众号查看 第2 ...

  5. python爬虫实例-10个python爬虫入门实例

    昨天带伙伴萌学习python爬虫,准备了几个简单的入门实例 涉及主要知识点: web是如何交互的 requests库的get.post函数的应用 response对象的相关函数,属性 python文件 ...

  6. python爬虫程序实例-10个python爬虫入门实例

    作者:h3zh1 来源:cnblogs.com/h3zh1/p/12548946.html 今天为大家准备了几个简单的python爬虫入门实例,分享给大家. 涉及主要知识点:web是如何交互的 req ...

  7. ADO.NET Entity Data Model入门实例

    ADO.NET Entity Data Model入门实例 快速开发一个网站,最繁琐的地方可能要算数据库访问和ORM了,还好.net中这个很强大,可以省去好多体力劳动. 这里就给个快速使用ADO.NE ...

  8. Java Socket入门实例

    基于测试驱动的Socket入门实例(代码的具体功能可以看我的程序中的注释,不理解的可以短信我) 先看Server的代码: package socketStudy; import java.io.Buf ...

  9. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  10. Activiti工作流从入门到入土:入门实例

    一.前言 在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念. 这一节,我将用一个入门程序,介绍如何使用activiti. 二.环境准备 2.1.编 ...

最新文章

  1. vue.js反编译_基于electron-vue开发的微信小程序反编译客户端
  2. 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
  3. 框架 go_go异步任务框架machinery,嗖嗖的[视频]
  4. LAMP部署脚本--安装篇
  5. hdu 4349——Xiao Ming's Hope
  6. 3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉
  7. ASP.NET或者 js方式实现文件夹多图片浏览的方式
  8. 此男因为什么被送进医院?
  9. access如何保存小数点后_如何设置石材雕刻机原点及断电后怎么保存原点坐标?...
  10. pytracking系列跟踪算法的配置(LWL, KYS, PrDiMP, DiMP and ATOM Trackers)(Ubuntu版本)
  11. python怎么让矩阵内所有元素自己平方_python numpy库中矩阵用法指南
  12. 5种Windows网络模型之select模型
  13. 硬盘SMART检测参数详解[转]
  14. Adaptive vision
  15. 【安全牛学习笔记】Kali Linux基本工具
  16. A40i/T3修改根分区大小
  17. python如何压缩pdf_如何压缩PDF文件?分享4种高效压缩方法!
  18. 推送系统从0到1(八):个性化精准推送的实现
  19. 鸿蒙系统能装CAD吗,64位cad能装到32位的系统上吗
  20. 常用的数据分布(泊松分布,二项分布,伯努利分布,正态分布,均匀分布等)

热门文章

  1. nginx做负载均衡+keepalived(做主备)
  2. 一些Iphone sqlite 的包装类
  3. Acer 4736ZG的Mac之旅
  4. 四种进程或线程同步互斥的控制方法
  5. java用户注册模块_用户注册登录模块设计方案报告.docx
  6. 博客园看到的很好的Linux网络编程技巧(此处一字不动的转载过来)
  7. wpf 切换搜狗输入法英文_搜狗输入法使用技巧整理,建议保存收藏
  8. python定义输入变量_Python 2 声明变量 输入输出 练习
  9. binder.java 565_Android跨进程抛异常的原理的实现
  10. java filter的类_Java FilterOutputStream类