lucene学习之多样化查询

lucend的多样化查询主要是通过一些内置的QUERY类型来实现:

TermQuery:进行项搜索

 

		Term t = new Term("filename","4167");
		Query query = new TermQuery(t);
		TopDocs docs = searcher.search(query, 100);
		System.out.println("一共搜索到结果:"+docs.totalHits+"条");


TermRangeQuery:在指定范围内搜索

TermRangeQuery query = TermRangeQuery.newStringRange("filename","4193","4198",true,true);
//查找文件名域值为4193到4198内的索引

NumericRangeQuery:在指定数字范围内进行搜索

prefixQuery:通过字符串搜索

BooleanQuery:组合查询

PhaseQuery:短语搜索

FuzzyQuery:搜索类似项

import java.nio.file.Paths;

import org.apache.lucene.analysis.core.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.*;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.store.*;
import org.apache.lucene.util.Version;

import junit.framework.TestCase;


public class BasicSearchTest extends TestCase{
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//testTerm();
		testQueryParser();
	}
	
	public static void testTerm() throws Exception{//查找一个term并使用Junit来测试
		Directory dir = FSDirectory.open(Paths.get("G:\\luceneout"));
		DirectoryReader reader = DirectoryReader.open(dir);
		IndexSearcher searcher  = new IndexSearcher(reader);
		
		Term t = new Term("filename","4167");
		Query query = new TermQuery(t);
		TopDocs docs = searcher.search(query, 100);
		System.out.println("一共搜索到结果:"+docs.totalHits+"条");
		assertEquals("找到了4167",4,docs.totalHits);
		t = new Term("filename","4206");
		docs = searcher.search(new TermQuery(t), 100);
		System.out.println("一共搜索到结果:"+docs.totalHits+"条");
		assertEquals("找到了4206",4,docs.totalHits);
		
		dir.close();
	}
	
	public static void testQueryParser() throws Exception{
		Directory dir = FSDirectory.open(Paths.get("G:\\luceneout"));
		DirectoryReader reader = DirectoryReader.open(dir);
		IndexSearcher searcher  = new IndexSearcher(reader);
		
		QueryParser parser = new QueryParser("content",new StandardAnalyzer());
		Query query = parser.parse("数据挖掘");
		TopDocs docs = searcher.search(query, 10);
		System.out.println("一共搜索到结果2:"+docs.totalHits+"条");
		assertEquals(216,docs.totalHits);
		Document d = searcher.doc(docs.scoreDocs[0].doc);
		System.out.print(d.get("path"));
		//assertEquals("找到交通规则",d.get("content"));
		
	}
	
	public void testTermRangeQuery() throws Exception{
		Directory dir = FSDirectory.open(Paths.get("G:\\luceneout"));
		IndexReader reader = DirectoryReader.open(dir);
		TermRangeQuery query = TermRangeQuery.newStringRange("filename","4193","4198",true,true);//指定项范围内搜索
		//NumericRangeQuery query = NumericRangeQuery.newIntRange("filename",(Integer)4193,(Integer)4198,true,true);//指定数字范围内搜索
		IndexSearcher searcher = new IndexSearcher(reader);
		TopDocs hits = searcher.search(query, 3);
		System.out.println("一共搜索到结果3:"+hits.totalHits+"条");
		dir.close();
	}

}
总之就是查询方式的多样化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值