lucene_04_解析语法查询
解析语法查询就是调用方法查询的原始查询
例如:
查询所有的查询器的语法为:*:*,因为lucene查询是根据term来做的,既是:key:value类型。*:*表示所有域中的所有值。
api调用语法解析
pom.xml 必须引入(其余的参看lucene_02).
<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);
区间查询
语法为: [0 TO 800}。TO左边为最小值,右边为最大值。“}”,“{”为不包含,“[”,“]”为包含。
组合语法应该为:“域:[0 TO 800}”
但是在lucene中不支持字符串的范围查询,所以只能使用 NumericRangeQuery.newLongRange。但在solr中就能使用字符串的语法查询。
组合条件查询
第一种写法:
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);
lucene_04_解析语法查询的更多相关文章
- [转载]ECMall模板解析语法与机制
ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...
- 函数parseQuery用于解析url查询参数
在百度上找的,以后忘了再看. 语法如下: var obj = parseQuery(query) query是被解析的查询参数,函数返回解析后的对象. 使用范例如下: var jerry = pars ...
- dinoql 使用graphql 语法查询javascript objects
dinoql 是一个不错的基于graphql 语法查询javascript objects 的工具包,包含以下特性 graphql 语法(很灵活) 安全的访问(当keys 不存在的时候,不会抛出运行时 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- arTemplate解析语法
模板解析语法 defaults.parser = function (code, options) { // var match = code.match(/([\w\$]*)(\b.*)/); // ...
- 添加jQuery方法解析url查询部分
Web前端不同页面间传值可以使用 cookies.localStorage 和 sessionStorage 等本地存储. 但是,今天我们尝试使用 url 查询,假设我们要传递字符串 str 到 mo ...
- 黑马旅游网 解析url查询字符串
function getUrlParam(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)( ...
- 解析URL查询字符串参数为对象以及老浏览器的getElementsByClassName
高程3使用拼接字符串形式解析的查询字符串,网上有各种正则方式解析的,记得太多,临时需要写的时候,自己都搞混乱了.只记一种吧,用正则. function getQueryStringArgs() { v ...
- IdentityServer4源码解析_5_查询用户信息接口
协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息.请求UserInfo接口需要使用通行令牌.响应报文通常是json数据格式,包含了一组claim键 ...
随机推荐
- React Native布局实践:开发京东client首页(三)——轮播图的实现
上篇文章中,我们一起构建了京东client的TabBar.在本文中.将继续向大家介绍京东client首页轮播图及其下发功能button的开发方法,如今就让我们開始吧! 1.相关控件调研 眼下在Gith ...
- Android之——常见Bug及其解决方式
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46942139 1.android.view.WindowManager$BadTo ...
- Wall(凸包)
http://poj.org/problem?id=1113 题意:给出一些点的坐标,和一个半径r,求出这些点围成的凸包的周长再加上一个半径为r的圆的周长. #include <stdio.h& ...
- php获得本机ipv4地址
if (isset($_ENV["HOSTNAME"])) $MachineName = $_ENV["HOSTNAME"]; else if (isset($ ...
- HDU 4474 Yet Another Multiple Problem BFS
题意:求m的倍数中不包含一些数码的最小倍数数码是多少.比如15 ,不包含0 1 3,答案是45. BFS过程:用b[]记录可用的数码.设一棵树,树根为-1.树根的孩子是所有可用的数码,孩子的孩子也是 ...
- Redis 字符串结构和常用命令
字符串是 Redis 最基本的数据结构,它将以一个键 和一个值 储存在 Redis 内部. 字符串的一些基本命令 命令 说明 备注 set key value 设置键值对 最常用的写入命令 get k ...
- 5.17领扣--Arrays.copyOf()方法
?? 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同 ...
- ios 指纹识别解锁
:添加LocalAuthentication.framework框架 :实现过程 #import "ViewController.h" #import <LocalAuthe ...
- redis-linux
redis3.0.4 server版本 jedis-2.7.2.jar spring-data-redis-1.6.0.RELEASE.jar commons-pool2-2.3.jar spring ...
- python监听鼠标和键盘
import PyHook3 def OnMouseEvent(event): print('MessageName:',event.MessageName) print('Message:',eve ...