解析语法查询就是调用方法查询的原始查询java
例如:apache
查询全部的查询器的语法为:*:*,由于lucene查询是根据term来作的,既是:key:value类型。*:*表示全部域中的全部值。api
api调用语法解析spa
pom.xml 必须引入(其他的参看lucene_02).code
<dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-queryparser</artifactId> <version>4.10.3</version> </dependency>
//初始化org.apache.lucene.queryparser.classic.QueryParser; //参数1:默认查询的域 //参数2:解析器 QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer()); // Query query = queryParser.parse("*:*"); Query query = queryParser.parse("apache"); printResult(query);
区间查询xml
语法为: [0 TO 800}。TO左边为最小值,右边为最大值。“}”,“{”为不包含,“[”,“]”为包含。blog
组合语法应该为:“域:[0 TO 800}”字符串
可是在lucene中不支持字符串的范围查询,因此只能使用 NumericRangeQuery.newLongRange。但在solr中就能使用字符串的语法查询。io
组合条件查询class
第一种写法:
1) +条件1+条件2: 两个条件之间是而且的关系and。
例如: +filename:apache +content:apaches
2) +条件1条件2: 必须知足第一个条件,应该知足第二个条件。
例如: +filename:apache content:apache.
3) 条件1条件2: 两个条件知足其一便可。
例如: filename:apache content:apacher
4)-条件1条件2: 必须不知足条件1,要知足条件2。
例如:-filename:apache content:apaches。
示例:
//初始化org.apache.lucene.queryparser.classic.QueryParser; //参数1:默认查询的域 //参数2:解析器 QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer()); // Query query = queryParser.parse("*:*"); // Query query = queryParser.parse("apache"); Query query = queryParser.parse("+fileName:java fileContent:coordination to your microservices"); printResult(query);
Occur.MUST 查询条件必须知足,至关于and (加号)。
Occur.SHOULD 查询条件可选,至关于or空(不用符号)。
Occur.MUST_NOT 查询条件不能知足,至关于not 非一(减号)。
第二种写法:
条件1 AND 条件2
条件1 OR 条件2
条件1NOT 条件2.
示例:
等同于第一种方法
@Test public void testParseQuery() throws Exception { //初始化org.apache.lucene.queryparser.classic.QueryParser; //参数1:默认查询的域 //参数2:解析器 QueryParser queryParser = new QueryParser("fileName", new IKAnalyzer()); // Query query = queryParser.parse("*:*"); // Query query = queryParser.parse("apache"); Query query = queryParser.parse("fileName:java OR fileContent:coordination to your microservices"); printResult(query); }
多默认域:了解。
Query query = queryParser.parse("fileName:java OR fileContent:coordination to your microservices");这种方式已经能够替代。
String[] fields = {"fileSize","fileContent"}; MultiFieldQueryParser multiFieldQueryParser = new MultiFieldQueryParser(fields,new IKAnalyzer()); Query query1 = multiFieldQueryParser.parse("java"); printResult(query1);