Lucene.NET入门实例
今天从网上找了一些关于Lucene.NET的资料,自己做个demo测试了一下。
Lucene.NET 是开源的项目,从网上很容易找到源代码,新建一个web测试页面和一个控制台程序,控制台程序用来创建lucene的索引
控制台代码如下:
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;
}
}
}
创建好索引之后,就可以使用了测试页面代码:
{
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入门实例相关推荐
- Lucene 02 - Lucene的入门程序(Java API的简单使用)
目录 1 准备环境 2 准备数据 3 创建工程 3.1 创建Maven Project(打包方式选jar即可) 3.2 配置pom.xml, 导入依赖 4 编写基础代码 4.1 编写图书POJO 4. ...
- Asp.Net MVC2.0 Url 路由入门---实例篇
本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...
- SpringMVC 框架系列之初识与入门实例
微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.SpringMVC 概述 (1).什么是 MVC:Model-View-Control Co ...
- 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...
本节书摘来自异步社区<HFSS电磁仿真设计从入门到精通>一书中的第2章,作者 易迪拓培训 , 李明洋 , 刘敏,更多章节内容可以访问云栖社区"异步社区"公众号查看 第2 ...
- python爬虫实例-10个python爬虫入门实例
昨天带伙伴萌学习python爬虫,准备了几个简单的入门实例 涉及主要知识点: web是如何交互的 requests库的get.post函数的应用 response对象的相关函数,属性 python文件 ...
- python爬虫程序实例-10个python爬虫入门实例
作者:h3zh1 来源:cnblogs.com/h3zh1/p/12548946.html 今天为大家准备了几个简单的python爬虫入门实例,分享给大家. 涉及主要知识点:web是如何交互的 req ...
- ADO.NET Entity Data Model入门实例
ADO.NET Entity Data Model入门实例 快速开发一个网站,最繁琐的地方可能要算数据库访问和ORM了,还好.net中这个很强大,可以省去好多体力劳动. 这里就给个快速使用ADO.NE ...
- Java Socket入门实例
基于测试驱动的Socket入门实例(代码的具体功能可以看我的程序中的注释,不理解的可以短信我) 先看Server的代码: package socketStudy; import java.io.Buf ...
- linux Shell(脚本)编程入门实例讲解详解
linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...
- Activiti工作流从入门到入土:入门实例
一.前言 在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念. 这一节,我将用一个入门程序,介绍如何使用activiti. 二.环境准备 2.1.编 ...
最新文章
- vue.js反编译_基于electron-vue开发的微信小程序反编译客户端
- 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
- 框架 go_go异步任务框架machinery,嗖嗖的[视频]
- LAMP部署脚本--安装篇
- hdu 4349——Xiao Ming's Hope
- 3D手势姿态跟踪算法:手机端实时检测,多个手势同时捕捉
- ASP.NET或者 js方式实现文件夹多图片浏览的方式
- 此男因为什么被送进医院?
- access如何保存小数点后_如何设置石材雕刻机原点及断电后怎么保存原点坐标?...
- pytracking系列跟踪算法的配置(LWL, KYS, PrDiMP, DiMP and ATOM Trackers)(Ubuntu版本)
- python怎么让矩阵内所有元素自己平方_python numpy库中矩阵用法指南
- 5种Windows网络模型之select模型
- 硬盘SMART检测参数详解[转]
- Adaptive vision
- 【安全牛学习笔记】Kali Linux基本工具
- A40i/T3修改根分区大小
- python如何压缩pdf_如何压缩PDF文件?分享4种高效压缩方法!
- 推送系统从0到1(八):个性化精准推送的实现
- 鸿蒙系统能装CAD吗,64位cad能装到32位的系统上吗
- 常用的数据分布(泊松分布,二项分布,伯努利分布,正态分布,均匀分布等)
热门文章
- nginx做负载均衡+keepalived(做主备)
- 一些Iphone sqlite 的包装类
- Acer 4736ZG的Mac之旅
- 四种进程或线程同步互斥的控制方法
- java用户注册模块_用户注册登录模块设计方案报告.docx
- 博客园看到的很好的Linux网络编程技巧(此处一字不动的转载过来)
- wpf 切换搜狗输入法英文_搜狗输入法使用技巧整理,建议保存收藏
- python定义输入变量_Python 2 声明变量 输入输出 练习
- binder.java 565_Android跨进程抛异常的原理的实现
- java filter的类_Java FilterOutputStream类