lucene 7.x 查询
@Test
public void indexSearch() throws IOException, ParseException { //Termquery:精确string查询
// Query termQuery = new TermQuery(new Term("id","1"));
// doSearch(termQuery); //数值范围查询
// Query rangeQuery = FloatPoint.newRangeQuery("price",55,56);
// doSearch(rangeQuery); //组合查询
/*Query q1 = new TermQuery(new Term("description","java"));
Query q2 = new TermQuery(new Term("name","java")); BooleanQuery.Builder builder = new BooleanQuery.Builder();
builder.add(new BooleanClause(q1, Occur.MUST));
builder.add(new BooleanClause(q2, Occur.MUST_NOT));
doSearch(builder.build());*/ //queryparser,需要指定分词器
/*QueryParser parser = new QueryParser("description",new StandardAnalyzer());
Query query = parser.parse("lucene");
query = parser.parse("description:lucene AND name:lucene");
doSearch(query);*/ //多域查询
//默认的搜索域,或的关系
String[] fields = {"name","description"};
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields,new StandardAnalyzer());
Query query = parser.parse("lucene");
// query = parser.parse("description:lucene AND name:lucene");
// query = parser.parse("description:lucene NOT name:lucene");
query = parser.parse("lucene java");//以或的关系在域中搜索
doSearch(query);
}
private void doSearch (Query query) {
Directory directory;
try {
directory = FSDirectory.open(Paths.get("F:/luceneIndex"));
IndexReader reader = DirectoryReader.open(directory);
//创建IndexSearcher
IndexSearcher searcher = new IndexSearcher(reader);
//10表示显示的条数
TopDocs topDocs = searcher.search(query,10);
long count = topDocs.totalHits;
System.out.println("匹配的总条数是----" + count);
//根据相关度排序后的结果
ScoreDoc[] docs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : docs) {
int docId = scoreDoc.doc;
Document document = searcher.doc(docId);
System.out.println("id----"+document.get("id"));
System.out.println("name----"+document.get("name"));
/*System.out.println("price----"+document.get("price"));
System.out.println("pic----"+document.get("pic"));
System.out.println("description----"+document.get("description"));*/
System.out.println("======================");
}
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
需要注意的组合查询的api变化,与老版本的直接new BooleanQuery()相比变化还是挺大的
lucene 7.x 查询的更多相关文章
- lucene 转义含有查询关键词的字符的
http://www.oschina.net/question/1092_560 Escaping Special Characters Lucene支持转义查询中的特殊字符,以下是Lucene的特殊 ...
- lucene复合条件查询案例——查询name域 或 description域 包含lucene关键字的两种方式
方式一:使用语法表达式查询 //查询name域 或 description域包含lucene关键字 QueryParser queryParser = new QueryParser("na ...
- (六)lucene之其他查询方式(组合查询,制定数字范围、指定字符串开头)
本章使用的是lucene5.3.0 指定数字范围查询 package com.shyroke.test; import java.io.IOException; import java.nio.fil ...
- lucene的索引查询
package com.hope.lucene;import org.apache.lucene.document.Document;import org.apache.lucene.document ...
- lucene 一次查询多个id
在文本搜索中,有时也需要一次搜索多个id,这里id类似数据库里面的主键. 这个id在索引里面的倒排列表长度往往等于1. 例如:根据id=[1,2,4,6,7]查询索引 最最一般的思路是构造一个bool ...
- lucene多条件查询”搜索—BooleanQuery
/** * “多条件查询”搜索—BooleanQuery * BooleanQuery也是实际开发过程中经常使用的一种Query. * 它其实是一个组合的Query,在使用时可以把各种Query对象添 ...
- 【Lucene】小谈lucene的BooleanQuery查询对象
BooleanQuery用于逻辑查询,即所谓的组合查询,具体的逻辑关系如下: 一个具体的使用测试,如下:
- lucene 多字段查询-MultiFieldQueryParser
/** * 搜索域加权 */ Map<String, Float> boosts = new HashMap<>(); boosts.put("title" ...
- Lucene查询语法详解
Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...
随机推荐
- ajax的post请求与编码
window.onload = function(){ document.getElementById('username').onblur = function(){ var name = docu ...
- js进阶 14-2 如何用ajax验证登陆状态(这里用load方法)
js进阶 14-2 如何用ajax验证登陆状态(这里用load方法) 一.总结 一句话总结:$('#test').load('test.php?password=1234560'),这样就get方式提 ...
- ES6的学习之路(基础知识总结)
1. 变量声明 1).let 1)使用let定义的变量不会进行"变量提升" console.log(a);//Uncaught ReferenceError: a is not d ...
- Fiddler--功能简介
Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.com Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料. Fiddler是最 ...
- 10.13 android输入系统_多点触摸驱动理论与框架
1.多点触摸驱动理论 驱动程序仅上报多个触点的位置就可以,是放大还是缩小由应用程序控制 对于多点触摸驱动在linux系统中有个输入子系统,其已经实现了open/read/write等接口 我们只需要实 ...
- jquery实现ajax提交form表单的方法总结(转)
方法一: 复制代码 代码如下: function AddHandlingFeeToRefund() { var AjaxURL= "../OrderManagement ...
- swift项目第二天:初始化项目
初始化项目 项目的部署版本 之后项目会运行在哪些系统中 横竖屏的支持 iPhone应用一般只支持横屏 iPhone游戏一般支持竖屏 iPad横竖屏都支持 设置项目的图标和启动图片 项目的图标(美工做好 ...
- iOS8新特性
1. App Extension Programming Guide 2.LocalAuthentication.framework - Touch ID Authentication 3.Local ...
- anaconda中实现双spyder版本
1)先在conda中创建一个名为python2的环境,并下载对应版本python2.7 conda create --name python27 python=2.7 2)激活python2环境 ac ...
- MongoDB 管理
1.给数据库增加分片功能 mongos> use admin mongos> db.runCommand({enablesharding:"cipnet"}) mong ...