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键 ...
随机推荐
- android graphic(15)—fence
为何须要fence fence怎样使用 软件实现的opengl 硬件实现的opengl 上层使用canvas画图 上层使用opengl画图 下层合成 updateTexImage doComposeS ...
- 利用jquery将页面中所有目标为“#‘的链接改为其他URL
有一张页面草稿,开始时为了方便,里面差不多所有的<a>都指向了"#".现在要修改为另一个地址,难道要全部修改吗?用jquery 改改就好.代码如下: <scrip ...
- Coder-Strike 2014
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove? viewmode=contents by---cxlove Qualification Round 略 Ro ...
- expectation-maximization algorithm ---- PRML读书笔记
An elegant and powerful method for finding maximum likelihood solutions for models with latent varia ...
- python使用MySQLdb向mySQL批量插入数据的方法
该功能通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理. 今天用这个函数完成了批量插入 例程: def test_insertDB(options) ...
- Newtonsoft.Json 序列化日期问题解决
上代码 其中的使用方法和UserInfo实体对象就不贴代码了. /// <summary> /// 把对象转成json字符串 /// </summary> /// <pa ...
- Doubles
http://poj.org/problem?id=1552 #include<stdio.h> ; int main() { int n,f[N],g[N]; int cnt; ) { ...
- 棋盘问题(dfs)
http://poj.org/problem?id=1321 思路:按行搜索,回溯时还原棋盘. #include <stdio.h> #include <string.h> ] ...
- java多线程编程之synchronized
synchronized是用来解决多线程情况下的线程安全问题的,它可以修饰方法也可以修饰语句块 , 那么什么情况下是线程安全和线程不安全呢 ? 方法内的变量是线程安全的 , 类的实例变量是非线程安全的 ...
- BZOJ 2333 左偏树 (写得我人生都崩溃了...)
思路: 高一神犇 竟然 问我这道题 我光荣地 看着题解(划掉) 写了一下午 QaQ multiset不能erase(一个值) 这样就把等于这个值 的数都erase掉了 (woc我一开始不 ...