@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 查询的更多相关文章

  1. lucene 转义含有查询关键词的字符的

    http://www.oschina.net/question/1092_560 Escaping Special Characters Lucene支持转义查询中的特殊字符,以下是Lucene的特殊 ...

  2. lucene复合条件查询案例——查询name域 或 description域 包含lucene关键字的两种方式

    方式一:使用语法表达式查询 //查询name域 或 description域包含lucene关键字 QueryParser queryParser = new QueryParser("na ...

  3. (六)lucene之其他查询方式(组合查询,制定数字范围、指定字符串开头)

    本章使用的是lucene5.3.0 指定数字范围查询 package com.shyroke.test; import java.io.IOException; import java.nio.fil ...

  4. lucene的索引查询

    package com.hope.lucene;import org.apache.lucene.document.Document;import org.apache.lucene.document ...

  5. lucene 一次查询多个id

    在文本搜索中,有时也需要一次搜索多个id,这里id类似数据库里面的主键. 这个id在索引里面的倒排列表长度往往等于1. 例如:根据id=[1,2,4,6,7]查询索引 最最一般的思路是构造一个bool ...

  6. lucene多条件查询”搜索—BooleanQuery

    /** * “多条件查询”搜索—BooleanQuery * BooleanQuery也是实际开发过程中经常使用的一种Query. * 它其实是一个组合的Query,在使用时可以把各种Query对象添 ...

  7. 【Lucene】小谈lucene的BooleanQuery查询对象

    BooleanQuery用于逻辑查询,即所谓的组合查询,具体的逻辑关系如下: 一个具体的使用测试,如下:

  8. lucene 多字段查询-MultiFieldQueryParser

    /** * 搜索域加权 */ Map<String, Float> boosts = new HashMap<>(); boosts.put("title" ...

  9. Lucene查询语法详解

    Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 ...

随机推荐

  1. java set转list,数组与list的转换

    读zookeeper的源码(zookeeper.java)时发现的,平时没有怎么注意: private final ZKWatchManager watchManager; List<Strin ...

  2. [D3] Margin Convention with D3 v4

    You can’t add axes to a chart if you don’t make room for them. To that end, the D3 community has ado ...

  3. JAVA一些基础概念

    Java (计算机编程语言) Java是一门面向对象编程语言,不仅吸收了C++语言的各种长处,还摒弃了C++里难以理解的多继承.指针等概念.因此Java语言具有功能强大和简单易用两个特征. Java语 ...

  4. TensorFlow 学习(十五)—— tensorflow.python.platform

    tensorflow.python.platform 下的常用工具类和工具函数:tensorflow/tensorflow/python/platform at master · tensorflow ...

  5. 【习题 3-4 UVA - 455】Periodic Strings

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举 [代码] #include <bits/stdc++.h> using namespace std; const ...

  6. linux中内存泄漏的检測(一)最简单的方法

    什么是内存泄漏 内存泄漏是指程序动态申请的内存在使用完后没有释放,导致这段内存不能被操作系统回收再利用. 比如这段程序,申请了4个字节的空间但没有释放,有4个字节的内存泄漏. #include < ...

  7. 【LeetCode】【C++】Linked list cycle 2

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  8. swift项目第七天:构建访客界面以及监听按钮点击

    一:访客界面效果如图 二:xib封装访客视图的view 1:业务逻辑分析:1:由于用户未登录时要显示访客视图,要先进行判断用户是否登录,未登录则显示访客视图,登录则显示正常的登陆界面,由于要在四个子控 ...

  9. javascript运算符应用

    下面的代码会输出什么?为什么? console.log(1 + "2" + "2"); console.log(1 + +"2" + &qu ...

  10. UI 06 ScrollView 的手动循环播放 与 自己主动循环播放

    假设想要循环播放的话, scrollView的照片前要加上最后一张图片, 最后要加上第一张图片. - (void)viewDidLoad { [super viewDidLoad]; // Do an ...