站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Lucene入门使用
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==Lucene的下载和配置== '''1、[[Lucene]]的下载''' lucene在jakarta项目中的发布主页:http://jakarta.apache.org/lucene/docs/index.html。 '''2、lucene的配置''' 首先请确定你的机子已经进行了[[Java]]使用环境的基本配置,即确保在某个平台下能够运行java源代码,否则请查阅相关文档进行配置。 接下来进入lucene的配置: 普通使用者:在环境变量的CLASSPATH中添加lucene的位置。比如:“D:\java \lucene-1.4-final\lucene-1.4-final.jar;”。 [[Jbuilder]]使用者:在“Project”--“Project Properties”--“Required Libraries”进行添加。 [[Jsp]]使用者:也可以直接将lucene-1.4-final.jar文件放到\WEB-INF\classes下。 ==Lucene 的范例(Demo )== '''1、Demo说明''' 可以得到的Demo包括:lucene-demos-1.4-final、XMLIndexingDemo,lucene-demos-1.4-final中包括对普通文件和[[html]]文件的两种索引,XMLIndexingDemo针对xml文件的索引。他们的区别主要在于:对普通文件进行索引时只要对文件的全文进行索引,而针对html、xml文件时,对标签类型不能进行索引,在实现上:html、[[xml]]的索引需要额外的数据流分析器,以分析哪些内容有用哪些无用。因此,在后两者实现上,索引的时间额外开支,甚至超过索引本身时间,而检索时间没有区别。 以上Demo中,lucene-demos-1.4-final自带于lucene-1.4-final.zip中,XMLIndexingDemo的下载地址: http://cvs.apache.org/viewcvs.cgi/jakarta-lucene-sandbox/contributions/XML-Indexing-Demo/ '''2、Demo的运行''' 首先将demo.jar的路径添加如环境变量的CLASSPATH中,例如:“D:\java\lucene-1.4-final\lucene-demos-1.4-final.jar;”,同时确保已经添加lucene-1.4-final.jar。 然后进行文件的全文索引,在dos控制台中,输入命令“java org.apache.lucene.demo.IndexFiles {full-path-to-lucene}/src”,后面的路径为所要进行索引的文件夹,例如:“java org.apache.lucene.demo.IndexFiles c:\test”。 接着对索引进行检索,敲入“java org.apache.lucene.demo.SearchFiles”,在提示“Query:”后输入检索词,程序将进行检索列出检索得到的结果(检索词出现的文件路径)。 其他Demo的运行请参考\docs\demo.html。 在运行Demo后请阅读Demo的源代码以便深入学习。 == 利用Lucene进行索引== 进行lucene的熟悉后,我们将学习如何使用Lucene。 一段索引的应用实例: //需要捕捉IOException异常 //建立一个IndexWriter,索引保存目录为“index” String[] stopStrs = { "他奶奶的", "fuck"}; StandardAnalyzer analyzer = new StandardAnalyzer(stopStrs); IndexWriter writer = new IndexWriter("index", analyzer, true); //添加一条文档 Document doc = new Document(); doc.add(Field.UnIndexed("id", "1"));//“id”为字段名,“1”为字段值 doc.add(Field.Text("text", "fuck,他奶奶的,入门与使用")); writer.addDocument(doc); //索引完成后的处理 writer.optimize(); writer.close(); 看完这段实例后,我们开始熟悉lucene的使用: '''1、Lucene的索引接口''' 在学习索引的时候,首先需要熟悉几个接口: *1.1、分析器Analyzer 分析器主要工作是筛选,一段文档进来以后,经过它,出去的时候只剩下那些有用的部分,其他则剔除。而这个分析器也可以自己根据需要而编写。 org.apache.lucene.analysis.Analyzer:这是一个虚构类,以下两个借口均继承它而来。 org.apache.lucene.analysis.SimpleAnalyzer:分析器,支持最简单拉丁语言。 org.apache.lucene.analysis.standard.StandardAnalyzer:标准分析器,除了拉丁语言还支持亚洲语言,并在一些匹配功能上进行完善。在这个接口中还有一个很重要的构造函数: StandardAnalyzer(String[] stopWords),可以对分析器定义一些使用词语,这不仅可以免除检索一些无用信息,而且还可以在检索中定义禁止的政治性、非法性的检索关键词。 *1.2 IndexWriter IndexWriter的构造函数有三种接口,针对目录Directory、文件File、文件路径String三种情况。 例如IndexWriter(String path, Analyzer a, boolean create),path为文件路径,a为分析器,create标志是否重建索引(true:建立或者覆盖已存在的索引,false:扩展已存在的索引。) [[Image:Lucene_FirstUse1.jpg|center]] I ndexWriter为了减少大量的io维护操作,在每得到一定量的索引后建立新的小索引文件(笔者测试索引批量的最小单位为10),然后再定期将它们整合到一个索引文件中,因此在索引结束时必须进行wirter. optimize(),以便将所有索引合并优化。 *1.3 org.apache.lucene.document 以下介绍两种主要的类: a)org.apache.lucene.document.Document: Document文档类似数据库中的一条记录,可以由好几个字段(Field)组成,并且字段可以套用不同的类型(详细见b)。Document的几种接口: [[Image:Lucene_FirstUse2.jpg|center]] b)org.apache.lucene.document.Field 即上文所说的“字段”,它是Document的片段section。 Field的构造函数: Field(String name, String string, boolean store, boolean index, boolean token)。 Indexed:如果字段是Indexed的,表示这个字段是可检索的。 Stored:如果字段是Stored的,表示这个字段的值可以从检索结果中得到。 Tokenized:如果一个字段是Tokenized的,表示它是有经过Analyzer转变后成为一个tokens序列,在这个转变过程tokenization中,Analyzer提取出需要进行索引的文本,而剔除一些冗余的词句(例如:a,the,they等,详见org.apache.lucene.analysis.StopAnalyzer.ENGLISH_STOP_WORDS和org.apache.lucene.analysis.standard.StandardAnalyzer(String[] stopWords)的API)。 Token是索引时候的基本单元,代表一个被索引的词,例如一个英文单词,或者一个汉字。因此,所有包含中文的文本都必须是Tokenized的。 Field的几种接口: [[Image:Lucene_FirstUse3.jpg|center]] ==利用Lucene进行检索== '''1、 一段简单的检索代码''' //需要捕捉IOException,ParseException异常 //处理检索条件 Query query = QueryParser.parse("入门", "text", analyzer); //检索 Searcher searcher = new IndexSearcher("./index");//"index"指定索引文件位置 Hits hits = searcher.search(query); //打印结果值集 for (int i = 0; i < hits.length(); i++) { Document doc = hits.doc(i); String id = doc.get("id"); System.out.println("found " + "入门" + " on the id:" + id); } '''2、利用Lucene的检索接口''' *2.1 Query与QueryParser 主要使用方法: QueryParser .parse(String query, String field, Analyzer analyzer),例如: Query query = QueryParser.parse("入门", "text", analyzer); "入门"为检索词, "text"为检索的字段名, analyzer为分析器 *2.2 Hits与Searcher Hits的主要使用接口: [[Image:Lucene_FirstUse4.jpg|center]] ==Lucene的其他使用== '''1、Lucene 的索引修改''' 下面给出一段修改索引的代码,请根据Lucene的[[API]]解读: /** * 对已有的索引添加新的一条索引 * @param idStr String:要修改的id * @param doc Document:要修改的值 */ public void addIndex(String idStr, String valueStr) { StandardAnalyzer analyzer = new StandardAnalyzer(); IndexWriter writer = null; try { writer = new IndexWriter(indexPath, analyzer, false); writer.mergeFactor = 2; //修正lucene 1.4.2 bug,否则不能正确反映修改 Document doc = new Document(); doc.add(Field.UnIndexed("id", idStr));//“id”为字段名,“1”为字段值 doc.add(Field.Text("text", valueStr)); writer.addDocument(doc); writer.optimize(); writer.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } /** * 删除索引 * * @param idStr String */ public void deleteIndex(String idStr) { try { Directory dirt = FSDirectory.getDirectory(indexPath, false); IndexReader reader = IndexReader.open(dirt); Term term = new Term("text", idStr); reader.delete(term); reader.close(); dirt.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } '''2、Lucene 的检索结果排序''' Lucene的排序主要是对org.apache.lucene.search.Sort的使用。Sort可以直接根据字段Field生成,也可以根据标准的SortField生成,但是作为Sort的字段,必须符合以下的条件:唯一值以及Indexed。可以对Integers, Floats, Strings三种类型排序。 对整数型的ID检索结果排序只要进行以下的简单操作: Sort sort = new Sort("id"); Hits hits = searcher.search(query, sort); 用户还可以根据自己定义更加复杂的排序,详细请参考API。 ==总结== Lucene给java的全文索引检索带来了非常强大的力量,以上仅对Lucene进行简单的入门说明。 ==参考来源== [http://blog.csdn.net/mxz391/archive/2007/05/15/1610140.aspx 参考来源] [[category:Lucene]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)