package com.meiyu.lucene;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.store.FSDirectory;
public class TestQuery extends TestLucene36
{
/**
* 测试各种Query
*
* @throws Exception
* @throws CorruptIndexException
*/
private static void testQuery() throws Exception
{
/**获取IndexSearcher*/
IndexReader reader = IndexReader.open(FSDirectory.open(new File(indexPath)));
IndexSearcher searcher = new IndexSearcher(reader);
/**1.TermQuery 按词条搜索*/
Query query = new TermQuery(new Term("desc","获得"));
/**2.MultiTermQuery*/
/**3.BooleanQuery 布尔搜索*/
// BooleanQuery query = new BooleanQuery();
// Query query1 = new TermQuery(new Term("desc","获得"));
// Query query2 = new TermQuery(new Term("name","白"));
// query.add(query1, BooleanClause.Occur.SHOULD);
// query.add(query2, BooleanClause.Occur.MUST);
/**4.WildcardQuery 通配符搜索*/
// WildcardQuery query = new WildcardQuery(new Term("desc", "因为*"));//*?
/**5.PhraseQuery 多关键字的搜索*/
// PhraseQuery query = new PhraseQuery();
// query.add(new Term("desc","因为"));
// query.add(new Term("desc","巨乳"));
// query.setSlop(5);//通过setSlop()方法来设定一个称之为“坡度”的变量来确定关键字之间是否允许、允许多少个无关词汇的存在
/**6.PrefixQuery 前缀搜索*/
// PrefixQuery query = new PrefixQuery(new Term("desc","因为"));
/**7.MultiPhraseQuery */
// MultiPhraseQuery query=new MultiPhraseQuery();
// query.add(new Term[]{new Term("desc","因为"),new Term("desc","巨乳")});
/**8.FuzzyQuery 相近词语的搜索*/
// FuzzyQuery query = new FuzzyQuery(new Term("desc","巨乳"));
/**9.TermRangeQuery 范围查询(主要指文本)*/
// TermRangeQuery query = new TermRangeQuery("desc","250","300",true,true);
/**10.NumericRangeQuery 范围查询(索引字段必须是 NumbericField)*/
// NumericRangeQuery<Integer> query = NumericRangeQuery.newIntRange("birth", 1980, 1983, true, false);
/**11.SpanQuery 跨度查询*/
// SpanTermQuery query1 = new SpanTermQuery(new Term("desc", "因为"));//单独使用SpanTermQuery同TermQuery
// SpanTermQuery query2 = new SpanTermQuery(new Term("desc", "巨乳"));
// SpanNearQuery query = new SpanNearQuery(new SpanQuery[]{query1, query2}, 5, true);//数值代表跨度范围
ScoreDoc[] hits = searcher.search(query,10).scoreDocs;
for(ScoreDoc scoreDoc:hits)
{
Document doc= searcher.doc(scoreDoc.doc);
System.out.println(scoreDoc.score + "\tid:"+doc.get("id")+"\tname:"+doc.get("name")+"\tbirth:"+doc.get("birth")+"\tdesc:"+doc.get("desc"));
}
}
public static void main(String[] args) throws Exception
{
// index();
testQuery();
}
}
分享到:
相关推荐
lucene3.6 搜索例子
(3) 自定义QueryParser效果测试 46 5.5 自定义过滤器 49 (1) 分析需求,创建接口 49 (2) 创建过滤器,继承Filter 50 (3) 实现接口,效果演示 52 第六章 LUCENE扩展 54 6.1 Luke 54 (1) 启动Luke 54 (2) 索引概述页面...
lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全(lucene3.6 模仿百度自动补全
在网上找了实例,但是发现不能使用,只能简历索引。...lucene3.6版本,能够建立索引,能搜索。inderwriter,indexsearch. 其中包C下的helloword实例能用,其余的全是网上不能用的。直接下载 可以运行
lucene 3.6 的入门例子 代码简洁 注释清晰 是入门只必备啊 附带了ik中文分词器 支持 停用词 扩展词等
这个是使用lucene实现全文检索的jar包 包含IkAnalyer jar这个分词器 使用非常方便
NULL 博文链接:https://yuan-bin1990.iteye.com/blog/1700272
说明: 例子是根据lucene3.6写的,也可以说是直接copy别人的。 包括参考文章的代码,以及修改部分之后的代码
lucene3.6的src包,可以用于附加上去看相应的源代码
本文档详细介绍了lucene3.6中的索引,以及每个部分对应于硬盘下的文件夹里的哪个文件。这个根据本人多年学术及编程经验总结的
修复IKAnalyzer2012存在的无法添加扩展的中文停用词的bug。详见:http://blog.csdn.net/kmguo/article/details/8779522
超全的lucene3.6学习记录,实现了3中不同方法的检索,而且都很简单,容易上手,附带工程原文件
lucene3.6入门实例教程 完整代码示例,lucene入门学习很好的资料
基于Lucene3.6进行全文检索的开发
lucene3.6+IKAnalyzer2012FF_u1,配套的JAR包,google code关了好不容易才下载回来的
lucene官方网站上的lucene3.6源码,很不错的学习资料。
基于lucene平台搜索工具相关包及使用说明.rar
基本可以满足 检索电脑内文件的需求了 已经封装过了 直接指定检索目录和索引目录来创建索引.提供给学习者门参考... 直接通过调用静态方法来实现 深度分页检索.
lucene-3.6.1源代码及jar包,需要的可以直接下载~~~~~~~
NULL 博文链接:https://never-forget.iteye.com/blog/1282200