- 自己動手寫分布式搜索引擎
- 羅剛
- 579字
- 2020-11-28 15:52:53
3.6 查詢語法與解析
Lucene不僅提供了API來自己創(chuàng)建查詢,而且還通過查詢分析器提供了豐富的查詢語言。
● 一個短語查詢可以用雙引號括起來,這樣只有精確匹配該短語的文檔才會匹配查詢條件。比如,搜索“上海世博會”只會出現(xiàn)包含連續(xù)出現(xiàn)“上海”和“世博會”的文檔。如果“上海”和“世博會”之間有其他詞,則不會匹配這樣的情況。所以搜索“上海世博會”比“上海AND世博會”這樣的查詢返回的結果更少。
● 使用^表示加權。例如搜索“solr^4 lucene”。
● 修飾符“+”“-”“NOT”。例如搜索“+solr lucene”。
● 布爾操作符“OR”“AND”。例如搜索“(solr OR lucene) AND user”。注意這里的AND必須是大寫的,如果是小寫,即and,就會被當作普通查詢詞看待了。
● 按域查詢。一個字段名后面跟冒號,再加上要搜索的詞語或短句,就可以把搜索條件限制在該字段。例如搜索“title:NBA”,匹配標題包含NBA的文檔。
QueryParser將輸入查詢字串解析為Lucene的Query對象,如圖3-17所示。

圖3-17 使用查詢表達式搜索
下面兩個寫法在功能上是等價的:
QueryParser parser = new QueryParser("name", wrapper); Query query = parser.parse("size:small AND color:blue");
與
BooleanQuery skuQuery = new BooleanQuery(); skuQuery.add(new TermQuery(new Term("size", "small")), Occur.MUST); skuQuery.add(new TermQuery(new Term("color", "blue")), Occur.MUST);
可以檢查返回的結果:
QueryParser parser = new QueryParser("title", analyzer); Query query = parser.parse("Monitor"); System.out.println(query.getClass().getName()); //org.apache.lucene.search.TermQuery
這表示QueryParser.parse()方法返回的是一個簡單的TermQuery。
直接這樣寫可能找不到結果:
Query query = new QueryParser("url", analyzer).parse(url);
需要把URL地址中的特殊字符當作普通字符看待。
Query query = new QueryParser("url", analyzer).newTermQuery( new Term("url", url)).parse(url);
有一些特殊字符,如單引號、轉(zhuǎn)義符等符號,怎么讓Lucene忽略它們,而把它們當作一般的字符串去查詢?方法是使用“\\”轉(zhuǎn)義或者直接調(diào)用org.apache.lucene.queryparser. classic.QueryParserBase.escape(String)方法。
- WordPress 2.7 Cookbook
- TArch 8.5天正建筑軟件標準教程
- Word-Excel-PowerPoint 2010三合一從新手到高手(超值版)
- 中文版3ds Max 2012實用教程(第2版)
- UG NX 8.0基礎與實例教程
- R Graph Cookbook
- Photoshop圖形圖像處理實用教程
- Procreate+ SketchUp +Photoshop建筑設計手繪表現(xiàn)技法
- Photoshop CC從入門到精通(全彩超值版)
- BIRT 2.6 Data Analysis and Reporting
- UG NX 8.0模具設計教程
- 中文版3ds Max 2016/VRay效果圖制作實戰(zhàn)基礎教程(全彩版)
- Cassandra High Performance Cookbook
- 數(shù)碼攝影修圖師完全手冊(第2卷)
- Photoshop-CorelDRAW 基礎培訓教程