Lucene-搜索方式

搜索方式、

/**
 * 1、关键词查询
 * 2、查询所有文档
 * 3、范围查询
 * 4、通配符查询
 * 5、短语查询
 * 6、Boolean查询
 * @author Administrator
 *
 */
public class QueryTest {
	/**
	 * 关键词查询
	 *   因为没有分词器,所以区分大小写
	 */
	@Test
	public void testTermQuery() throws Exception{
		Term term = new Term("title","lucene");
		Query query = new TermQuery(term);
		this.showData(query);
	}
	
	/**
	 * 查询所有的文档
	 */
	@Test
	public void testAllDocQuery() throws Exception{
		Query query = new MatchAllDocsQuery();
		this.showData(query);
	}
	
	/**
	 *  通配符查询
	 *    * 代表任意多个任意字符
	 *    ? 任意一个任意字符
	 */
	@Test
	public void testWildCartQuery() throws Exception{
		Term term = new Term("title","*.java");
		Query query = new WildcardQuery(term);
		this.showData(query);
	}
	
	/**
	 * 短语查询
	 *    所有的关键词对象必须针对同一个属性
	 * @param query
	 * @throws Exception
	 */
	@Test
	public void testPharseQuery() throws Exception{
		Term term = new Term("title","lucene");
		Term term2 = new Term("title","搜索");
		PhraseQuery query = new PhraseQuery();
		query.add(term,0);
		query.add(term2,4);
		this.showData(query);
	}
	
	/**
	 * boolean查询
	 *    各种关键词的组合
	 * @param query
	 * @throws Exception
	 */
	@Test
	public void testBooleanQuery() throws Exception{
		Term term = new Term("title","北京");
		TermQuery termQuery = new TermQuery(term);
		Term term2 = new Term("title","美女");
		TermQuery termQuery2 = new TermQuery(term2);
		Term term3 = new Term("title","北京美女");
		TermQuery termQuery3 = new TermQuery(term3);
		BooleanQuery query = new BooleanQuery();
		query.add(termQuery,Occur.SHOULD);
		query.add(termQuery2,Occur.SHOULD);
		query.add(termQuery3,Occur.SHOULD);
		this.showData(query);
	}
	
	/**
	 * 范围查询
	 * @param query
	 * @throws Exception
	 */
	@Test
	public void testRangeQuery() throws Exception{
		Query query = NumericRangeQuery.newLongRange("id", 5L, 10L, true, true);
		this.showData(query);
	}
	
	private void showData(Query query) throws Exception{
		IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.directory);
		TopDocs topDocs = indexSearcher.search(query, 25);
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		List<Article> articleList = new ArrayList<Article>();
		for(ScoreDoc scoreDoc:scoreDocs){
			Document document =  indexSearcher.doc(scoreDoc.doc);
			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());
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值