Lucene_demo06_几种搜索
创建searcher的过程
1、创建Directory
2、根据directory创建indexReader
3、根据indexReader创建indexSearcher
4、创建搜索的Query
5、根据searcher搜索并且返回TopDocs
6、根据TopDocs获取ScordDoc对象获取具体的Document对象
7、根据searcher和ScordDoc对象获取具体的Document对象
8、根据Document对象获取需要的值
9、关闭reader
/**
* @see 1、关键词查询
* @see 2、查询所有的文档 重点
* @see 3、范围查询
* @see 4、通配符查询 重点
* @see 5、短语查询
* @see 6、Boolean查询 重点
*/
public class QueryTest {
/**
* 关键词查询 * 因为在创建Term对象的时候,没有分词器,所以这里的字母是区分大小写的 * Term构造函数的第二个参数指的是关键词,必须存在
*/
@Test
public void testTermQuery() throws Exception {
Term term = new Term("title", "总冠军");
Query query = new TermQuery(term);
this.testSearchIndex(query);
}
/**
* 查询所有的文档
*/
@Test
public void testAllQuery() throws Exception {
Query query = new MatchAllDocsQuery();
this.testSearchIndex(query);
}
/**
* 通配符查询 说明: * 代表任意多个任意字符 ? 代表一个任意字符
*/
@Test
public void testWildCardQuery() throws Exception {
Term term = new Term("title", "*总?军");
Query query = new WildcardQuery(term);
this.testSearchIndex(query);
}
/**
* boolean查询 可以根据Occur的常量把好几个查询结合在一起
*/
@Test
public void testBooleanQuery() throws Exception {
Term term = new Term("title", "总冠军");
TermQuery termQuery = new TermQuery(term);
Term term2 = new Term("content", "2?13");
Query wildCardQuery = new WildcardQuery(term2);
BooleanQuery query = new BooleanQuery();
query.add(termQuery, Occur.SHOULD);// Occur.MUST必须有、Occur.MUST_NOT必须没有、Occur.SHOULD可以有
query.add(wildCardQuery, Occur.SHOULD);
this.testSearchIndex(query);
}
/**
* 范围查询 查询id范围在5~15间的数据
*/
@Test
public void testRangeQuery() throws Exception {
Query query = NumericRangeQuery.newLongRange("id", 5L, 15L, true, true);
this.testSearchIndex(query);
}
/**
* 所有的Term对象只能在同一个field中进行 如果两个以上大的关键词进行组合查询,得知道其中的位置(分词后的位置)
*/
@Test
public void testPharseQuery() throws Exception {
Term term = new Term("title", "NBA总冠军");
Term term2 = new Term("title", "NBA总冠军");
PhraseQuery phraseQuery = new PhraseQuery();
phraseQuery.add(term);
phraseQuery.add(term2);
this.testSearchIndex(phraseQuery);
}
// 公共输出方法
private void testSearchIndex(Query query) throws Exception {
IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.directory);
TopDocs topDocs = indexSearcher.search(query, 50);
int count = topDocs.totalHits;// 总的记录数
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<Article> articleList = new ArrayList<Article>();
for (int i = 0; i < scoreDocs.length; i++) {
int index = scoreDocs[i].doc;
Document document = indexSearcher.doc(index);
Article article = DocumentUtils.document2Article(document);
articleList.add(article);
}
// 输入搜索出来的内容
for (Article article : articleList) {
System.out.println(article.getId());
System.out.println(article.getTitle());
System.out.println(article.getContent());
}
}
}
参考:
http://my.oschina.net/winHerson/blog/82194
分享到:
相关推荐
在“LuceneDemo”项目中,我们可以看到以下几个关键部分: - **索引创建**:一个示例程序会读取指定的数据源(如文本文件或数据库),应用Analyzer进行预处理,然后创建索引。 - **查询接口**:提供了用户输入查询...
总结来说,Lucene实战Demo主要涉及以下几个步骤: 1. 创建Analyzer:选择合适的分析器,如SmartChineseAnalyzer,用于处理中文分词。 2. 建立索引:使用IndexWriter将文档写入Directory对象,如FSDirectory。 3. ...
【Entity_Resolution_Demo】项目是一个专注于实体解析(Entity Resolution)的应用示例,由SEARCH团队开发。实体解析是信息检索和数据集成中的一个重要概念,它旨在识别和链接数据库或文本中表示同一实体的不同表示...
【Lucene结合Sql建立索引】是将数据库中的数据通过Lucene这个全文搜索引擎进行索引,以便快速查询和检索的一种技术。在这个商业源码中,我们可能会看到如何使用Java编程语言来实现这样一个功能。Lucene是Apache软件...
总结来说,.NET搜索引擎基于LUCENE的实现,为.NET开发者提供了一种强大且灵活的文本检索解决方案。通过深入学习和实践,开发者可以构建出满足特定需求的搜索引擎,提高信息检索的效率和准确性。无论是个人项目还是...
在“PanGu_Release_V2.3.1.0 (1)”这个压缩包中,包含的"demo.exe"是一个示例程序,它可能展示了如何使用盘古分词和Lucene.NET 进行中文分词和字典管理。运行这个程序,我们可以直观地看到分词效果,理解盘古分词的...
在"Luence.Net搜索Demo"中,我们可以学习到以下几个关键知识点: 1. **索引构建**:Luence首先需要对数据进行索引,这是搜索的基础。在这个Demo中,我们可能会看到如何将文本数据(如文档、网页等)转换为Luence可...
在Lucene中,创建一个简单的索引和搜索程序通常分为以下几个步骤: 1. 引入依赖:首先,你需要在项目中引入Lucene的依赖库。这可以通过Maven或Gradle等构建工具完成。 2. 创建索引:创建一个`Directory`对象,如`...
IKAnalyzer是IK算法的一种实现,它基于Lucene,提供了一个简单易用的API,使得开发者能够快速地集成到自己的项目中。 IK算法的核心思想是动态扩展词典,它在分词过程中不断学习和优化。主要有以下几个关键点: 1....
《Nutch初体验:深入解析开源搜索引擎框架》 Nutch是一个开源的全文搜索引擎项目,它主要专注于网络爬虫和信息提取。Nutch以其强大的可扩展性和灵活性,被广泛用于构建大规模的网页抓取和索引系统。在这个初体验中...
- **实时性**:对于需要实时搜索的应用,可以考虑使用实时索引技术,如Lucene的近实时搜索。 - **搜索建议**:可实现自动补全和联想搜索功能,提升用户体验。 - **搜索过滤与排序**:根据应用需求,自定义搜索...
在IT行业中,Elasticsearch(简称ES)是一个广泛使用的开源搜索引擎和实时数据分析工具,它基于Lucene构建,具有分布式、RESTful风格的API、自动分词、全文搜索、实时分析等特性。本示例"restclient-elastic.zip...