Lucene.net初探
引言
在分析同事开发的客户端搜索项目时注意到,搜索的关键是索引,而提到索引就不得不提Lucene.net,思路就是将需要搜索内容写入索引,客户端自己或局域网其他机器搜索时直接搜索索引,从而查看到你共享的信息。
初探Lucene.net时关注了几个关键类:
a):IndexReader 索引读取。
b):IndexWriter 创建索引。
c):StandardAnalyzer 分词解析,这个应用就比较多了,他解析英文和中文时会拆成单个的字母或者汉字,如果使用PanGuAnalyzer【盘古分析解析】则是拆分成词组搜索。
d):IndexSearcher 索引搜索。
效果
1、写入内容时的索引文件

2、输入关键字之后搜索效果

代码
static void Main(string[] args)
{
//CreateIndex("Oracle", "甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司"); ReadIndex("oracle 公司 IBM"); Console.ReadKey(); } private static void CreateIndex(string title,string content)
{
string indexpath = AppDomain.CurrentDomain.BaseDirectory + "IndexData";
FSDirectory directory = FSDirectory.Open(new DirectoryInfo(indexpath), new NativeFSLockFactory()); bool isExist = IndexReader.IndexExists(directory); //判断该索引是否存在
if (isExist)
{
if (IndexWriter.IsLocked(directory)) //写入索引时需要解锁
{
IndexWriter.Unlock(directory);
}
} IndexWriter indexWriter=new IndexWriter(directory,new StandardAnalyzer(),!isExist,IndexWriter.MaxFieldLength.UNLIMITED); Document document =new Document(); Field f1 =new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED);
Field f2 = new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED); document.Add(f1);
document.Add(f2); indexWriter.AddDocument(document); indexWriter.Optimize();
indexWriter.Close();
} private static void ReadIndex(string keywords)
{
string indexpath = AppDomain.CurrentDomain.BaseDirectory + "IndexData";
string title = "";
string content = ""; StandardAnalyzer analyzer=new StandardAnalyzer(); //分词
IndexSearcher searcher=new IndexSearcher(indexpath); //索引搜索 -- 传入索引文件路径 //MultiFieldQueryParser多字段搜索,一次可以传入多个需要解析的内容,
//如果需要一次传入一个就使用QueryParse
MultiFieldQueryParser parser =new MultiFieldQueryParser(new string[]{"title","content"},analyzer ); Query query = parser.Parse(keywords);//转化为Lucene内部使用的查询对象
Hits hits = searcher.Search(query); //执行搜索 for (int i=0; i<hits.Length(); i++)
{
Document doc = hits.Doc(i);
title += doc.Get("title");
content += doc.Get("content");
}
searcher.Close(); Console.WriteLine("Title:"+title);
Console.WriteLine("Content:" + content); }
}
Lucene.net初探的更多相关文章
- 【手把手教你全文检索】Apache Lucene初探
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...
- [转载] Apache Lucene初探
转载自http://www.cnblogs.com/xing901022/p/3933675.html 讲解之前,先来分享一些资料 首先呢,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办 ...
- lucene 初探 - 查询
lucene初探, 是为了后面solr做准备的. 如果跳过lucene, 直接去看solr, 估计有点懵. 由于时间的关系, lucene查询方法也有多个, 所以单独出来. 一. 精确查询 /** * ...
- lucene 初探
前言: window文件管理右上角, 有个搜索功能, 可以根据文件名进行搜索. 那如果从文件名上判断不出内容, 我岂不是要一个一个的打开文件, 查看文件的内容, 去判断是否是我要的文件? 几个, 十几 ...
- 【手把手教你全文检索】Apache Lucene初探 (zhuan)
http://www.cnblogs.com/xing901022/p/3933675.html *************************************************** ...
- Apache Lucene初探
讲解之前,先来分享一些资料 首先,学习任何一门新的亦或是旧的开源技术,百度其中一二是最简单的办法,先了解其中的大概,思想等等.这里就贡献一个讲解很到位的ppt 这是Lucene4.0的官网文档:htt ...
- lucene初探
http://www.cnblogs.com/xing901022/p/3933675.html
- Apache Lucene学习笔记
Hadoop概述 Apache lucene: 全球第一个开源的全文检索引擎工具包 完整的查询引擎和搜索引擎 部分文本分析引擎 开发人员在此基础建立完整的全文检索引擎 以下为转载:http://www ...
- solr6.6初探之分词篇
关于solr6.6搭建与配置可以参考 solr6.6初探之配置篇 在这里我们探讨一下分词的配置 一.关于分词 1.分词是指将一个中文词语拆成若干个词,提供搜索引擎进行查找,比如说:北京大学 是一个词那 ...
随机推荐
- 判断是否为mac电脑 、还是windows操作系统
/** * 是否为mac系统(包含iphone手机) * */ var isMac = function() { return /macintosh|mac os x/i.test(navigator ...
- 安卓 自定义AlertDialog对话框(加载提示框)
AlertDialog有以下六种使用方法: 一.简单的AlertDialog(只显示一段简单的信息) 二.带按钮的AlertDialog(显示提示信息,让用户操作) 三.类似ListView的Aler ...
- IOAPIC重定位中断处理函数思路整理
因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如 ...
- cocoapods 命令
1.使用CocoaPods a 新建一个项目,名字cocoapods
- 学习笔记: Delphi之线程类TThread
新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...
- 利用SSH Filesystem实现远程文件系统
远程文件系统的访问有很多种不同的实现方式,一些常见的连接方式比其它特定情况下的更有用.最著名的一个例子就是微软的通用互联网文件系统(CIFS),它可以容许微软Windows"映射网 ...
- 我的第一段jQuery代码
说起 jQuery,很多人可能觉得,不算什么,就是个js类库.而,对于我,下面这几行代码,是一个新的开始. 多年来,我一直在使用MooTools ,他面向对象,写起来结构清晰分明,都是在原生js的基础 ...
- 【腾讯Bugly干货分享】Android ImageView 正确使用姿势
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5832602d7196970d65901d76 导语 本文主要介绍了ImageV ...
- Mina入门教程(二)----Spring4 集成Mina
在spring和mina集成的时候,要十分注意一个问题:版本. 这是一个非常严重的问题,mina官网的demo没错,网上很多网友总结的代码也是对的,但是很多人将mina集成到spring中的时候,总是 ...
- LOMA280保险原理读书笔记
LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...