解析語法查詢就是調用方法查詢的原始查詢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);