lucene的建立检索学习实例源码

标签: lucene 检索 学习 | 发表时间:2012-12-22 22:01 | 作者:烤德
出处:http://www.cnblogs.com/
/**
* 测试索引
* @author Administrator
*
*/
import java.io.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;

public class indexTest
{
//声明索引路劲常量
private static final String INDEX_STORE_PATH = "D:\\test";

public static void main(String[] args)throws IOException
{
indexwriter();
indexrriter();
System.out.println("1.&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
indexwriterONE();
indexrriter();
//System.out.println("2.&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//indexwriterONE();
//indexrriter();
while(true)
{
System.out.println("请输入查找的关键字:");
seacher();
}
}

/*
*创建索引
*/
public static void indexwriter() throws IOException
{
IndexWriter writer=new IndexWriter( INDEX_STORE_PATH ,new StandardAnalyzer(),true);
writer.setUseCompoundFile(false);
//创建三个文档
Document doc1=new Document();
Document doc2=new Document();
Document doc3=new Document();

//创建域
Field f1=new Field("bookname","钢铁是怎么样练成的",Field.Store.YES,Field.Index.TOKENIZED);
Field f2=new Field("bookname","英雄的女儿",Field.Store.YES,Field.Index.TOKENIZED);
Field f3=new Field("bookname","篱笆女人和狗",Field.Store.YES,Field.Index.TOKENIZED);

//将域分别添加到文档中
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);

//将文件写入到索引写作器,将三个文档写入磁盘
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
//关闭写作器
writer.close();

System.out.println("索引建立完毕-------");
}

/*
*使用IndexReader读取索引
*/
public static void indexrriter()
{
try{
//创建阅读器
IndexReader reader =IndexReader.open(INDEX_STORE_PATH);
//显示所有的document文档
System.out.println("索引文档列表为:");
for(int i=0;i<reader.numDocs();i++)
System.out.println(reader.document(i));
//输出当前索引的版本号
System.out.println("版本号:" + reader.getVersion());
//当前索引的文档数
System.out.println("索引内的文档数有:" + reader.numDocs());

//关闭reader
reader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

/*
*再添加一个文档到索引
*/
static void indexwriterONE()
{
try
{
//由于只是添加,所以在IndexWriter()中的indexCreate参数设置为false
IndexWriter writer=new IndexWriter( INDEX_STORE_PATH ,new StandardAnalyzer(),false);
writer.setUseCompoundFile(false);

Document doc4=new Document();
Field f4=new Field("bookename","钢铁战士",Field.Store.YES,Field.Index.TOKENIZED);

doc4.add(f4);
writer.addDocument(doc4);

writer.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

/*
*构造条词并在索引中查找(测试索引结果)
*
**/
static void seacher() throws IOException
{
//创建阅读器
IndexReader reader =IndexReader.open(INDEX_STORE_PATH);
//输入关键字
BufferedReader KBreader= new BufferedReader(new InputStreamReader(System.in));
String keyword=KBreader.readLine();
System.out.println("查找条词"+ "'"+ keyword +"'");
//构造条词
Term term= new Term("bookname",keyword);
TermDocs docs=reader.termDocs(term);

int i=0;
while(docs.next())
{
i+=1;
System.out.println("--------------");
System.out.println("含有所查找的<"+ term +">的document的编号是:"+docs.doc());
System.out.println(term+"在文档中出现的次数为"+docs.freq());
System.out.println("--------------");


}

System.out.println("-------12133-------"+i);
//关闭KBreader和reader
//KBreader.close();
reader.close();
}
}

 

本文链接

相关 [lucene 检索 学习] 推荐:

lucene的建立检索学习实例源码

- - 博客园_首页
System.out.println("请输入查找的关键字:");. Field f1=new Field("bookname","钢铁是怎么样练成的",Field.Store.YES,Field.Index.TOKENIZED);. Field f2=new Field("bookname","英雄的女儿",Field.Store.YES,Field.Index.TOKENIZED);.

Lucene实践:全文检索的基本原理

- - 开源软件 - ITeye博客
http://lucene.apache.org/java/docs/index.html 定义:. 是一个高效的,基于Java. 所以在了解Lucene之前要费一番工夫了解一下全文检索. 我们生活中的数据总体分为两种:. 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等.

lucene排序

- - 开源软件 - ITeye博客
排序是对于全文检索来言是一个必不可少的功能,在实际运用中,排序功能能在某些时候给我们带来很大的方便,比如在淘宝,京东等一些电商网站我们可能通过排序来快速找到价格最便宜的商品,或者通过排序来找到评论数最高或卖的最好的商品,再比如在Iteye里的博客栏里,每天都会以降序的方式,来显示出最新发出的几篇博客,有了排序,我们就能在某些时候很方便快速的得到某些有效信息,所以说排序功能,无处不在 ^_^.

[原]Lucene系列-facet

- - 文武天下
facet:面、切面、方面. 个人理解就是维度,在满足query的前提下,观察结果在各维度上的分布(一个维度下各子类的数目). 如jd上搜“手机”,得到4009个商品. 其中品牌、网络、价格就是商品的维度(facet),点击某个品牌或者网络,获取更细分的结果. 点击品牌小米,获得小米手机的结果,显示27个.

[原]Lucene系列-FieldCache

- - 文武天下
域缓存,加载所有文档中某个特定域的值到内存,便于随机存取该域值. 当用户需要访问各文档中某个域的值时,IndexSearcher.doc(docId)获得Document的所有域值,但访问速度比较慢,而且只能获得Stored域的值. FieldCache能获得域值数组,根据docId random access域值.

Lucene 使用教程

- - 行业应用 - ITeye博客
1 lucene简介 . 1.1 什么是lucene . Lucene是一个全文搜索框架,而不是应用产品. 因此它并不像 http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 1.2 lucene能做什么 . 要回答这个问题,先要了解lucene的本质.

Lucene 4.x 之 IndexReader

- - zzm
在Lucene 3.x时代,《Lucene In Action》是一本相当不错的参考书,书中详细介绍了Lucene各种高级使用技术,对于开发者来说非常实用. 但是近期Lucene升级到了4.x版本,在性能等各方面有了很大的提高,值得在新项目中使用. 然而Lucene 4.x中的API相比3.x来说有了很大的改变,《Lucene In Action》中的很多内容都已经过时了,并且由于4.x推出的时间不长,还没有比较好的文档来对用法进行说明,这个系列文章就是想记录下自己使用Lucene 4.x的经验体会,供大家参考使用.

文章: 集成Lucene和HBase

- - InfoQ cn
在所有先进的应用程序中,不管是购物站点还是社交网络乃至风景名胜站点,搜索都扮演着关键的角色. Lucene搜索程序库事实上已经成为实现搜索引擎的标准. 苹果、IBM、Attlassian(Jira)、Wolfram以及很多大家喜欢的公司【1】都使用了这种技术. 因此,大家对任何能够提升Lucene的可伸缩性和性能的实现都很感兴趣.

Solr\Lucene优劣势分析

- - 淘宝网综合业务平台团队博客
最早lucene2.4以及以前,追溯到2008年前后,lucene刚刚引起大家的关注,到后来Nutch. 、solr的出现,lucene变得更加热. Nutch、Solr的发展,极大推动了lucene的升级. 对于一些接触过搜索,使用过lucene、solr的人来说,一般都会感觉lucene、solr很牛逼.