欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lucene&&solr02

程序员文章站 2022-07-01 09:18:30
...

MatchAllDocsQuery
使用MatchAllDocsQuery查询索引目录中的所有文档

public void testMatchAllDocsQuery()throws Exception{
		//指定索引库存放的路径
		Directory directory = FSDirectory.open(new File("G:\\temp\\index"));
		//创建一个IndexReader对象
		IndexReader indexReader = DirectoryReader.open(directory);
		//创建IndexSearcher对象
		IndexSearcher indexSearcher = new IndexSearcher(indexReader);
		//创建一个Query对象
		Query query = new MatchAllDocsQuery();
		//查询索引库
		TopDocs topDocs = indexSearcher.search(query,100);
		ScoreDoc[] scoreDocs = topDocs.scoreDocs;
		System.out.println("查询结果总记录数" +topDocs.totalHits);
		//遍历查询结果
		for (ScoreDoc scoreDoc : scoreDocs) {
			int docId= scoreDoc.doc;
			//通过id查询文档对象
			Document document = indexSearcher.doc(docId);
			//取属性
			System.out.println(document.get("name"));
			System.out.println(document.get("path"));
			System.out.println(document.get("content"));
			System.out.println(document.get("size"));
			
		}
      indexReader.close();
	}

NumericRangeQuery
数值范围查询

@Test
	public void testNumericRangeQuery()throws Exception{
		//创建一个数值范围查询
		//参数1:要查询的域 参数2:最小值 参数3:最大值  参数4:是否包含最小值  参数5:是否包含最大值
		Query query =NumericRangeQuery.newLongRange("size", 0l, 1000l, 	true, true);
		//打印结果
		printResult(getIndexSearcher(), query);
	}

BooleanQuery

public void testBooleanQuery()throws Exception{
		//创建一个BooleanQuery对象
		BooleanQuery query = new BooleanQuery();
		//创建子查询,文件大于1000小于10000
		Query query1 =NumericRangeQuery.newLongRange("size", 1000l, 10000l, 	true, true);
		//文件名中包含mybatis关键字
		Query query2 = new TermQuery(new Term("name","mybatis"));
		//添加到BooleanQuery对象中
		query.add(query1,Occur.MUST);
		query.add(query2,Occur.MUST);
		//执行查询
		printResult(getIndexSearcher(), query);
	}

Occur.MUST:必须满足此条件,相当于and
Occur.SHOULD:应该满足,但是不满足也可以,相当于or
Occur.MUST_NOT:必须不满足。相当于not
使用QueryParser查询

public void testQueryParser()throws Exception{
		//创建一个QueryParser对象。 参数1:默认搜索域 参数:2分析器对象
		QueryParser queryParser = new QueryParser("content", new IKAnalyzer());
		//调用parse方法可以获得一个Query对象
		//参数:要查询的内容,可以是一句话。先分词在查询
		Query query = queryParser.parse("mybatis is a apache project");
		printResult(getIndexSearcher(), query);
	}

导入
lucene-queryparser包

推荐阅读