Lucence的各种查询
来源:互联网 发布:java开发者论坛 编辑:程序博客网 时间:2024/06/05 06:33
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.util.Version;
public class SearchTest {
private static IndexReader reader = null;
static {
try {
reader = DirectoryReader.open(FileIndexUtils.getDirectory());
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取IndexSearcher
* @return
*/
public IndexSearcher getSearcher() {
try {
if(reader==null) {
reader = DirectoryReader.open(FileIndexUtils.getDirectory());
} else {
IndexReader tr = DirectoryReader.openIfChanged((DirectoryReader)reader);
if(tr!=null) {
reader.close();
reader = tr;
}
}
return new IndexSearcher(reader);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 带过滤器的查询
* @param queryStr
* @param filter
*/
public void searcherByFilter(String queryStr,Filter filter) {
try {
IndexSearcher searcher = getSearcher();
QueryParser parser = new QueryParser(Version.LUCENE_4_9,"content",new StandardAnalyzer(Version.LUCENE_4_9));
Query query = parser.parse(queryStr);
TopDocs tds = null;
if(filter!=null)
tds = searcher.search(query,filter,550);
else {
tds = searcher.search(query, 550);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
for(ScoreDoc sd:tds.scoreDocs) {
Document d = searcher.doc(sd.doc);
System.out.println(sd.doc+":("+sd.score+")" +
"["+d.get("filename")+"["+d.get("path")+"]--->"+
d.get("size")+"-----"+sdf.format(new Date(Long.valueOf(d.get("date"))))+"]");
}
searcher.getIndexReader().close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据不同的域进行排序查询
* @param queryStr
* @param sort
*/
public void searcherBySort(String queryStr,Sort sort) {
try {
IndexSearcher searcher = getSearcher();
QueryParser parser = new QueryParser(Version.LUCENE_4_9,"content",new StandardAnalyzer(Version.LUCENE_4_9));
Query query = parser.parse(queryStr);
TopDocs tds = null;
if(sort!=null)
tds = searcher.search(query, 550, sort);
else {
tds = searcher.search(query, 550);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
for(ScoreDoc sd:tds.scoreDocs) {
Document d = searcher.doc(sd.doc);
System.out.println(sd.doc+":("+sd.score+")" +
"["+d.get("filename")+"["+d.get("path")+"]---"+d.get("score")+"--->"+
d.get("size")+"-----"+sdf.format(new Date(Long.valueOf(d.get("date"))))+"]");
}
//searcher.getIndexReader().close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据Query查询
* @param queryStr
*/
public void searcherByQuery(Query queryStr) {
try {
IndexSearcher searcher = getSearcher();
TopDocs tds = null;
tds = searcher.search(queryStr, 550);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
for(ScoreDoc sd:tds.scoreDocs) {
Document d = searcher.doc(sd.doc);
System.out.println(sd.doc+":("+sd.score+")" +
"["+d.get("filename")+"["+d.get("path")+"]--->"+
d.get("size")+"-----"+sdf.format(new Date(Long.valueOf(d.get("date"))))+"]");
}
searcher.getIndexReader().close();
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package org.adv.lucene.test;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Filter;
import org.apache.lucene.search.NumericRangeFilter;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.QueryWrapperFilter;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermRangeFilter;
import org.apache.lucene.search.WildcardQuery;
import org.adv.lucene.util.FileIndexUtils;
import org.adv.lucene.util.SearchTest;
import org.junit.Before;
import org.junit.Test;
public class TestSearch {
private SearchTest st;
@Before
public void init() {
st = new SearchTest();
}
@Test
public void index() {
FileIndexUtils.index(true);
}
/***
* 测试根据不同的域进行排序查询
*/
@Test
public void test01() {
//Sort.INDEXORDER通过doc的id进行排序
// st.searcherBySort("java",Sort.INDEXORDER);
//使用默认的评分排序
//st.searcherBySort("java", Sort.RELEVANCE);
//st.searcherBySort("java", null);
//通过文件的大小排序
//st.searcherBySort("java",new Sort(new SortField("size",SortField.Type.INT)));
//通过日期排序
//st.searcherBySort("java",new Sort(new SortField("date",SortField.Type.LONG)));
//通过文件名排序
//st.searcherBySort("java", new Sort(new SortField("filename", SortField.Type.STRING)));
//System.out.println("-----------------------");
//通过设置SortField最后一个参数设置是否反转排序
//st.searcherBySort("java", new Sort(new SortField("filename", SortField.Type.STRING,true)));
//使用多个域排序,使用size域,和文档的默认评分排序
st.searcherBySort("java", new Sort(new SortField("size",SortField.Type.INT),SortField.FIELD_SCORE));
}
/**
* 根据条件来过滤查询
*/
@Test
public void test02() {
Filter tr = TermRangeFilter.newStringRange("filename", "impalad.she","statestored.ba",true, true);
//tr = NumericRangeFilter.newIntRange("size",2000,3900,true,true);
//可以通过一个Query进行过滤
tr = new QueryWrapperFilter(new WildcardQuery(new Term("filename","*.she")));
st.searcherByFilter("java", tr);
}
/**
* 根据Query来查询
*/
@Test
public void test03() {
Query q = new WildcardQuery(new Term("filename","?m*"));
st.searcherByQuery(q);
}
}
- Lucence的各种查询
- lucence 各种 Field
- Lucence自定义过滤器查询
- Lucence自定义评分查询
- Lucence自定义查询解析器
- Lucence的基本原理
- Lucence索引的存储
- Lucence的见解
- lucence
- lucence
- lucence
- lucence
- lucence
- Lucence
- Lucence
- lucence
- lucence 搜索引擎平台的搭建
- Lucence的Field属性整理
- HDU 5093 Battle ships [二分图匹配]
- 路由器和网关
- cocos2d-x里得到当前动画播放帧数的方法
- MySQL之导入导出
- 黑马程序员-IOS-OC基础-OC简介及基本语法
- Lucence的各种查询
- ListView(1)----Simple_listView
- THREE.js -- 增加Nurbs曲线旋转生成曲面,即时调整更新实例
- 项目经验总结(2)
- 基于cocos2d-x引擎的游戏框架设计
- AJAX分页 (内容涉及到 数据库存储过程)
- LZW算法
- Windows下使用Coding作为代码托管服务器并使用Eclipse访问配置
- 格式化数字(1069)