Lucene3.1对QueryParser做了调整
来源:互联网 发布:网络问政 编辑:程序博客网 时间:2024/05/18 21:11
Lucene3.1对QueryParser做了调整,搜索语法树发生了变化。示例效果如下:
示例代码:
注意其中QueryParser parser = new QueryParser(Version.LUCENE_31, "text", analyzer)的部分,采用Version.LUCENE_31和Version.LUCENE_30(及以前)的搜索结果是不一样的,结果如下:
采用30版本的结果:
text:"国务院 食品 安全"
hits:0
采用31版本的结果:
text:国务院 text:食品 text:安全
hits:1
可以发现,在LUCENE3.0之前的版本中,用"国务院食品安全"做搜索词搜索"国务院办公厅关于印发2011年食品安全重点工作安排的通知"这段话是搜不到的,而用"国务院 食品安全"(中间有一个空格)就可以。3.1之后的版本,两个搜索词就等价了。
示例代码:
public static final String word = "国务院办公厅关于印发2011年食品安全重点工作安排的通知"; /** * 建索引<br> * * @throws CorruptIndexException * @throws LockObtainFailedException * @throws IOException */ private static void build() throws CorruptIndexException, LockObtainFailedException, IOException { String path = "index"; IndexWriter writer = new IndexWriter(FSDirectory.open(new File(path)), new SmartChineseAnalyzer(Version.LUCENE_35), true, MaxFieldLength.LIMITED); Document document = new Document(); document.add(new Field("text", word, Store.YES, Index.ANALYZED)); writer.addDocument(document); writer.optimize(); writer.close(); } /** * 搜索 * * @param keyword * @throws CorruptIndexException * @throws IOException * @throws ParseException * @throws InvalidTokenOffsetsException */ private static void search() throws CorruptIndexException, IOException, ParseException { String keyword = "国务院食品安全"; Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_35); QueryParser parser = new QueryParser(Version.LUCENE_31, "text", analyzer); Query query = parser.parse(keyword); IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File("index"))); System.out.println(query); TopDocs topDocs = searcher.search(query, 10); ScoreDoc[] scoreDocs = topDocs.scoreDocs; System.out.println("hits:" + topDocs.totalHits); for (ScoreDoc scoreDoc : scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); String text = doc.get("text"); System.out.println(text); } }
注意其中QueryParser parser = new QueryParser(Version.LUCENE_31, "text", analyzer)的部分,采用Version.LUCENE_31和Version.LUCENE_30(及以前)的搜索结果是不一样的,结果如下:
采用30版本的结果:
text:"国务院 食品 安全"
hits:0
采用31版本的结果:
text:国务院 text:食品 text:安全
hits:1
可以发现,在LUCENE3.0之前的版本中,用"国务院食品安全"做搜索词搜索"国务院办公厅关于印发2011年食品安全重点工作安排的通知"这段话是搜不到的,而用"国务院 食品安全"(中间有一个空格)就可以。3.1之后的版本,两个搜索词就等价了。
- Lucene3.1对QueryParser做了调整
- lucene3.5报错org.apache.lucene.queryParser.ParseException
- lucene3.0的查询语法和QueryParser的语法
- Oracle Database 12c中对分区功能做了较多的调整
- 【Lucene3.6.2入门系列】第09节_高级搜索之自定义QueryParser
- 【Lucene3.6.2入门系列】第09节_高级搜索之自定义QueryParser
- 对上一个打开对话框作了调整
- Jsp+servlet+javabean使用Lucene3.6.2做一个简单数据库搜索的总结(1)
- Oracle 对分区做调整记得加update global indexes
- ffmpeg3版本的解码接口做了不少调整,之前的视频解码接口avcodec_decode_video2和avcodec_decode_audio4音频解码被设置为deprecated,对这两个接口做了
- 对www.dbanotes.net 作了彻底的调整
- Google对Kernel做了哪些改动?
- 对AGG svg_viewer做了一些改进
- iOS 9对前端做了什么?
- seci-log 1.13 发布 简化了安装和程序底层结构做了调整
- 学习lucene3.5时,做的一个小例子
- 做自我调整
- ICTCLAS分词系统研究(九)--对最终结果做优化调整
- ios拷贝小议
- js中masonry与infinitescroll结合
- 【Ubuntu手记】64位Ubuntu11.10下 eclipse配置Android开发环境所遇到的问题
- 排序算法
- java程序员面试必备的32个要点
- Lucene3.1对QueryParser做了调整
- uva 146 - ID Codes
- D3D学习笔记(初始化Direct3D)
- 内部UML培训文件,欢迎大家批评指正
- C-Ruby源码分析
- release 去掉log
- Direct3D初始化之细节处理
- TASK_KILLABLE:Linux 中的新进程状态
- poj 1657 Distance on Chessboard