如果是Lucene3.0以上版本首先我们需要下载庖丁解牛最新源码并生成jar文件,我已经将最新源码和jar文件上传了:http://download.csdn.net/detail/a_2cai/3671164 ,可以下载,或者下载一个SVN客户端从http://code.google.com/p/paoding/检出最新的trunk源码,本地编译下。

当我们有了最新的庖丁解牛分词包和lucene3.3或Lucene3.4即可以运行以下示例:(我已将源码和使用到的文件以及生成的索引文件上传了:http://download.csdn.net/detail/a_2cai/3671272)

为了简单起见我建了一个txt文件:内容如下(就如一个数据库的不同条目)

172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::移动侦测::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVU::移动::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVUC::移动侦测::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::Lucene测试::2011/9/1172.7.14.198::172.7.19.71::遮挡一下::遮挡报警::2011/9/1172.7.14.198::172.7.19.71::遮经挡报警::遮挡报警::2011/9/1172.7.14.198::172.7.19.71::多域测试::移动侦测::2011/9/1172.7.14.198::172.7.19.71::多域测试::移动侦测::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::移动侦测::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVU::磁盘已满::2011/8/31172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::移动侦测::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::移动侦测::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVU::移动::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVUC::移动侦测::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::Lucene测试::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::遮挡报警::2011/9/1172.7.14.198::172.7.19.71::DS-2DF1-4010020090611AACH290005648WC::移动侦测指的是将一个汉字序列切分成一个一个单独的词::2011/9/1172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVU::查询方式总体来讲分两类:查询API查询和语法查询::2011/8/31172.7.14.198::172.7.24.51::DS-9016HF-S1620100809BBRR401273372WCVU::对于查询时的Field名一定要大小写对应,默认情况下要查询的关键字要转成小写,这在lucene建索引的时候做过特殊处理::2011/8/31

建索引:

public static void testIndex() throws Exception{

String itemFilePath = "TestDocs/luceneDemoTest.txt";

boolean isCreate = false;

Date start = new Date();

try {

System.out.println("Indexing to directory '" + indexFilePath + "'...");

Directory dir = FSDirectory.open(new File(indexFilePath));

//Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_33);

//Analyzer analyzer = new PaodingAnalyzer("etc/paoding-analysis-default.properties");

//Analyzer analyzer = new PaodingAnalyzer("F:/paodingetc/paoding-analysis-default.properties");

//Analyzer analyzer = new PaodingAnalyzer("ifexists:paoding-dic-home.properties");

Analyzer analyzer = new PaodingAnalyzer();

IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_33,

analyzer);

if (isCreate) {

//创建新索引删除旧索引

iwc.setOpenMode(OpenMode.CREATE);

} else {

// 向索引中添加新的Document

iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);

}

// iwc.setRAMBufferSizeMB(256.0);

IndexWriter writer = new IndexWriter(dir, iwc);

FileInputStream fis;

try {

fis = new FileInputStream(itemFilePath);

} catch (FileNotFoundException fnfe) {

return;

}

try {

//new BufferedReader();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis, "UTF-8"));

String item = "";

String[] fields;

item = bufferedReader.readLine();

Integer id = 0;

while(!"".equals(item) && item != null) {

id++;

fields = item.split("::");

// 创建空文档

Document doc = new Document();

// NumericField idField = new NumericField("ID", Field.Store.YES, true);

// idField.setIntValue(id);

// doc.add(idField);

doc.add(new Field("ID", id.toString(),Field.Store.YES, Field.Index.NO));

doc.add(new Field("IDSTR", id.toString(),Field.Store.YES, Field.Index.NOT_ANALYZED));//不分词索引,其实没必要索引为了测试所以索引

NumericField idField = new NumericField("IDNUM", Field.Store.YES, true);

idField.setIntValue(id);

doc.add(idField);//用于测试数字

doc.add(new Field("PCIP", fields[0],Field.Store.YES, Field.Index.ANALYZED));

doc.add(new Field("DeviceIP", fields[1],Field.Store.YES, Field.Index.ANALYZED));

doc.add(new Field("DeviceSerialNum", fields[2],Field.Store.YES, Field.Index.ANALYZED));

doc.add(new Field("AlarmType", fields[3],Field.Store.YES, Field.Index.ANALYZED));

//一个域可以有子集

doc.add(new Field("MultiFields", fields[2],Field.Store.YES, Field.Index.ANALYZED));

doc.add(new Field("MultiFields", fields[3],Field.Store.YES, Field.Index.ANALYZED));

NumericField alarmDatetime = new NumericField("alarmDatetime", Field.Store.YES, true);

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");

alarmDatetime.setLongValue(simpleDateFormat.parse(fields[4]).getTime());

doc.add(alarmDatetime);

if (id == 5) {

doc.setBoost(1.2f);

}

if (writer.getConfig().getOpenMode() == OpenMode.CREATE) {

writer.addDocument(doc);

} else {

writer.updateDocument(new Term("ID" , id.toString()),

doc);

}

item = bufferedReader.readLine();

}

} finally {

fis.close();

}

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

writer.close();

Date end = new Date();

System.out.println(end.getTime() - start.getTime()

+ " total milliseconds");

} catch (IOException e) {

System.out.println(" caught a " + e.getClass()

+ "\n with message: " + e.getMessage());

}

}

检索:

public static void testSearch() throws Exception{

String field = "AlarmType";

boolean raw = false;

String queryString = "移动";

int hitsPerPage = 10;

IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(indexFilePath)));

//Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_33);

//Analyzer analyzer = new PaodingAnalyzer();

BufferedReader in = null;

//QueryParser parser = new QueryParser(Version.LUCENE_33, field, analyzer);

//Query query = parser.parse(queryString.trim());

Query query = new TermQuery(new Term(field,"查询"));

System.out.println("Searching for: " + query.toString(field));

// Collect enough docs to show 5 pages

TopDocs results = searcher.search(query, 5 * hitsPerPage, Sort.RELEVANCE);

ScoreDoc[] hits = results.scoreDocs;

int numTotalHits = results.totalHits;

System.out.println(numTotalHits + " total matching documents");

for (int i = 0; i < hits.length; i++) {

Document doc = searcher.doc(hits[i].doc);

System.out.println("ID:" + doc.get("ID") + "\tPCIP:" + doc.get("PCIP") + "\tDeviceIP:" + doc.get("DeviceIP")

+ "\tDeviceSerialNum:" + doc.get("DeviceSerialNum") + "\tAlarmType:" + doc.get("AlarmType")

+ "\tAlarmDatetime:" + new Date(Long.parseLong(doc.get("alarmDatetime"))).toString());

}

}

以上为建索引和检索的简单实例,大家可以下载源码运行调试下,对于初接触的人使用会有帮助的。Demo源码以及相关配置信息见eclipse工程:http://download.csdn.net/detail/a_2cai/3671272

lucene java 庖丁解牛_Lucene3.3、Lucene3.4中文分词——庖丁解牛分词实例相关推荐

  1. lucene java 庖丁解牛_Lucene分词器之庖丁解牛

    Lucene分词器之庖丁解牛 留意:这儿配置环境变量要重新启动体系后收效 我如今测验用的Lucene版本是lucene-2.4.0,它现已可以支撑中文号码大全分词,但它是关键词挖掘工具选用一元分词(逐 ...

  2. java调用b超_java开源中文分词-jcseg

    jcseg是使用Java开发的一个中文分词器,使用流行的mmseg算法实现. 1.目前最高版本:jcseg 1.7.1. 兼容最高版本的lucene. 2.mmseg四种过滤算法,分词准确率达到了98 ...

  3. lucene的建立索引,搜索,中文分词

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包. 现在最新的lucene已经更新到6.0版本了.但是这个最新版,需要适配jdk1.80以 ...

  4. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  5. java读取.properties文件及解决中文乱码问题

    java读取.properties文件及解决中文乱码问题 参考文章: (1)java读取.properties文件及解决中文乱码问题 (2)https://www.cnblogs.com/helloq ...

  6. Apache Lucene Java 全文检索引擎架构

    Apache Lucene Java 全文检索引擎架构 Apache Lucene 8.9.0 已发布,Lucene 是完全用 Java 编写的高性能.功能齐全的全文检索引擎架构,提供了完整的查询引擎 ...

  7. Java 将数字金额转成中文大写

    一个 Java 将数字金额转成中文大写的工具类,还不是很完善. import java.util.regex.Matcher; import java.util.regex.Pattern;publi ...

  8. 公司开源的java分词,Java开源项目cws_evaluation:中文分词器分词效果评估

    通过对前文<word分词器.ansj分词器.mmseg4j分词器.ik-analyzer分词器分词效果评估>中写的评估程序进行重构改进,形成了一个新的Java开源项目cws_evaluat ...

  9. JAVA代码实现Excel下载,中文名称乱码问题

    #JAVA代码实现Excel下载,中文名称乱码问题 ##第一:检查乱码的服务器版本是否在代码中进行处理 ###处理方式: if(request.getHeader("user-Agent&q ...

  10. java ssh乱码_SSH框架下中文字符乱码问题的研究

    1 Java中文乱码问题的产生原因 在Java Web的应用中,中文字符乱码问题是个由来已久和让人头疼的问题,尤其是刚刚接触Java Web编程的人员,往往在解决中文字符乱码问题上花费了大量的时间和精 ...

最新文章

  1. mysql64如何配置_win7 64位下如何安装配置mysql-winx64(安装记录)
  2. 20172314 2018-2019-1《程序设计与数据结构》第四周学习总结
  3. 一步步优化JVM六:优化吞吐量[转]
  4. 前端学习(2235):react的列表渲染
  5. php 汉字分割,php支持中文字符串分割的函数
  6. 使用 docker 命令不用加 sudo
  7. 【前端】数字媒体技术专业主要课程及就业方向
  8. 二叉树的创建_【数据结构用python描述】python创建二叉树
  9. 6.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- Lua 语言
  10. 聊聊ConcurrentHashMap
  11. Java中的注释方法
  12. 伺服速度控制模式接线图_伺服驱动器速度控制模式的接线方式及注意事项
  13. 在设计四人抢答器中灯全亮_EDA课程设计—四人抢答器设计
  14. android+关闭屏幕旋转,Android:即使设备自动旋转屏幕关闭,如何强制反向纵向?...
  15. server sql 将出生日期转为年龄_sql server 根据身份证号计算出生日期和年龄的存储过程...
  16. 【滤波跟踪】基于EKF、时差和频差定位实现目标跟踪附matlab代码
  17. Redis设计与实现笔记2
  18. 在vue中使用Echarts的3D柱状图
  19. linux搞笑图片,2017高考表情包(最新最全表情包合集)-高考表情包恶搞搞笑图片下载-西西软件下载...
  20. 最新19C版Oracle数据库下载安装

热门文章

  1. 文本编辑程序(第四章 P85)
  2. 【日语】标日初级上册单词(21-24)1
  3. 面向语言学的计算机,科学网—我们的选择与未来:计算语言学硕士的方向 - 李斌的博文...
  4. 怎么写计算机教学论文,大学计算机教学论文大纲范文模板 大学计算机教学论文框架怎么写...
  5. 计算机软件存在复制品吗,计算机软件保护常识
  6. ArcGIS二次开发基础教程(13):网络分析之最近设施分析
  7. 老友记台词学习笔记 SE01EP02(四)
  8. 如何将电脑加入指定的域名
  9. 网易云音乐招聘 | 遇见offer之就要圆你的大厂梦
  10. freemarker 模板生成pdf文件并下载