- package com.test.lucene;
- import java.io.File;
- import org.apache.lucene.analysis.Analyzer;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.queryParser.QueryParser;
- import org.apache.lucene.search.IndexSearcher;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.search.ScoreDoc;
- import org.apache.lucene.search.TopDocs;
- import org.apache.lucene.store.Directory;
- import org.apache.lucene.store.FSDirectory;
- import org.apache.lucene.util.Version;
- import org.junit.Test;
- public class ParserTest {
- // 共找到1条记录
- // name: java
- // date:1334494024083
- // size: 148
- // content: 全国软件专业人才设计与开发大赛
- // 帽子和服装
- // Hello
- // Lucene实战(第二版) Lucene in action
- // 人民邮电出版社
- // the quick brown fox jumped over the lazy dog
- private static final Version version = Version.LUCENE_35;
- private static final Analyzer analyzer = new StandardAnalyzer(version);//和索引时用的分词器一致
- @Test
- public void testQueryPraser() throws Exception {
- //QueryParser parser = new QueryParser(version, "content", analyzer);//默认在content域中查找
- QueryParser parser = new MyQueryParser(version, "content", analyzer);//默认在content域中查找, 重写了getRangeQuery方法, 可以进行数字范围查询
- Query query = null;
- //查找content(默认域)中存在软件的结果
- query = parser.parse("软件");
- //查找name域中有java的结果
- query = parser.parse("name:java");
- //使用通配符
- query = parser.parse("name: j*");//默认*号不能出现在最前端, 会影响效率, 使用parser.setAllowLeadingWildcard(true)打开
- query = parser.parse("lu*n?");//只能在单个分词中使用通配符, 即 使用 “lucene*action”就匹配不到
- query = parser.parse("lucene test");//默认lucene和action是或关系
- query = parser.parse("lucene OR test");//同上, OR必须大写
- query = parser.parse("lucene AND test");//与关系
- query = parser.parse("- lucene + test");//存在test但不存在lucene
- //query = parser.parse("size:[100 TO 200]");//这个query是TermRangeQuery所以不能用于数字(日期)范围查询
- query = parser.parse("name:[java TO java]");//查找有a-z字母的 {}不包含
- //数字范围查询需要重写QueryParser的getRangeQuery方法
- query = parser.parse("date:[1334550379955 TO 1334550379955]");
- query = parser.parse("\"lucene action\"~1");//1即phraseQuery中的slop=1
- query = parser.parse("name:xava~0.74");//加上~代表模糊查询, 要和上面的额短语查询相区别开来,另外~后面可以加一个浮点数去顶相似度
- //查询大小在145到150, 名称与javv相似, 创建时间在1334550379955之前的 不要, lucene与action相距1
- query = parser.parse("size:[145 TO 150] + name:javv~ - date:[1 TO 1334550379954] + \"lucene action\"~1");
- doSearch(query);
- }
- private void doSearch(Query query) throws Exception{
- Directory dir = FSDirectory.open(new File("E:/lucene/index"));
- IndexReader reader = IndexReader.open(dir);
- IndexSearcher searcher = new IndexSearcher(reader);
- TopDocs hits = searcher.search(query, 100);
- System.out.println("共找到" + hits.totalHits + "条记录");
- ScoreDoc[] docs = hits.scoreDocs;
- for(int i = 0; i < docs.length; i++){
- int docId = docs[i].doc;
- Document doc = searcher.doc(docId);
- System.out.println("name: " + doc.get("name"));
- System.out.println("date:" + doc.get("date"));
- System.out.println("size: " + doc.get("size"));
- System.out.println("content: " + doc.get("content"));
- }
- searcher.close();
- }
- }
- /**
- * 自定义QueryParser, 提供数字范围查询支持
- * @author Ping_QC
- *
- */
- public class MyQueryParser extends QueryParser {
- public MyQueryParser(Version matchVersion, String f, Analyzer a) {
- super(matchVersion, f, a);
- }
- @Override
- protected org.apache.lucene.search.Query getRangeQuery(String field,
- String part1, String part2, boolean inclusive)
- throws ParseException {
- if ("size".equals(field) || "date".equals(field)) {
- return NumericRangeQuery.newLongRange(field, Long.parseLong(part1),
- Long.parseLong(part2), inclusive, inclusive);
- }
- return super.newRangeQuery(field, part1, part2, inclusive);
- }
- }
http://blog.csdn.net/ping_qc/article/details/7465888
相关推荐
Lucene3.5全部源码,打包jar文件,可以直接打开查看源码,Lucene开发必备
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
luke3.5 可查看lucene3.5索引
lucene3.5的创建和增删改查的工程
lucene 官网的3.5源代码,标准代码,未做任何处理
基于新发布的Lucene3.5 做的一个实例,仅供参考。
lucene3.5高亮
几个经常用到的包,有中文分词器,核心包,高亮包...等等
chm格式的Lucene帮助文档,Lucene3.5
lucene3.5全文检索案例lucene+demo
用爬虫爬下来的Lucene3.5 api 可以正常使用
lucene3.5的API,虽然是英文版,不过还是很有用的
Lucene 3.5&API,最新版
这个为一个lucene3.5所写的程序例子,有助于刚入门的学习lucene的人,更快的的进入到lucene的学习中去。
lucene3.5中文分词,详细的注释,适用于初学者。有兴趣的可以看看。
基于新发布的Lucene3.5的学习,对部分模块的研究及学习心得。
solr_lucene3.5_lukeall-3.5.0.jar.zip
介绍lucene3.5的相关技术,包括基本用法、分析器、索引建立与查询,扩展的高亮、分页、以及solr3.5的相关用法
Lucene3.5视频教程(内含分享链接) 一共50集, 包含各部分讲解及源码