10 Lucene索引库查询 - queryparser查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20042935/article/details/90054395

通过QueryParser也可以创建Query,QueryParser提供一个Parse方法,此方法可以直接根据查询语法来查询。Query对象执行的查询语法可通过System.out.println(query);查询。

需要使用到分析器。建议创建索引时使用的分析器和查询索引时使用的分析器要一致。

QueryParser

需要加入queryParser依赖的jar包。
在这里插入图片描述

1.程序实现
@Test
public void testQueryParser() throws Exception {
	IndexSearcher indexSearcher = getIndexSearcher();
	//创建queryparser对象
	//第一个参数默认搜索的域
	//第二个参数就是分析器对象
	QueryParser queryParser = new QueryParser("content", new IKAnalyzer());
	Query query = queryParser.parse("Lucene是java开发的");
	//执行查询
	printResult(query, indexSearcher);
}
2.查询语法

1、基础的查询语法,关键词查询:
域名+“:”+搜索的关键字
例如:content:java

2、范围查询
域名+“:”+[最小值 TO 最大值]
例如:size:[1 TO 1000]
范围查询在lucene中不支持数值类型,支持字符串类型。在solr中支持数值类型。

3、组合条件查询

  • 1)+条件1 +条件2:两个条件之间是并且的关系and
    例如:+filename:apache +content:apache

  • 2)+条件1 条件2:必须满足第一个条件,应该满足第二个条件
    例如:+filename:apache content:apache

  • 3)条件1 条件2:两个条件满足其一即可。
    例如:filename:apache content:apache

  • 4)-条件1 条件2:必须不满足条件1,要满足条件2
    例如:-filename:apache content:apache
    在这里插入图片描述

第二种写法:
条件1 AND 条件2
条件1 OR 条件2
条件1 NOT 条件2

MulitFieldQueryParser

可以指定多个默认搜索域

@Test
public void testMultiFiledQueryParser() throws Exception {
	IndexSearcher indexSearcher = getIndexSearcher();
	//可以指定默认搜索的域是多个
	String[] fields = {"filename", "content"};
	//创建一个MulitFiledQueryParser对象
	MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, new IKAnalyzer());
	Query query = queryParser.parse("java and apache");
	System.out.println(query);
	//执行查询
	printResult(query, indexSearcher);
	
}

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/90054395
今日推荐