package cn.harmel.lucene;

import java.io.IOException;
import java.nio.file.Paths; import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.queryparser.classic.QueryParser.Operator;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.SortField.Type;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory; public class SearchIndex {
public static void main(String[] args) throws IOException, ParseException {
/*---------------------------------------------------------------------------------
* String queryString="title:\"美国\"";//包含“美国”
* String queryString="NOT title:\"美国\" AND title:\"国\"";//不包含 “美国” 但是包含 “国”
* String queryString="title:\"中\" AND title:\"国人\"";//即包含 “中” 又包含 ”国人“
* String queryString="title:\"张三\" OR title:\"李四\"";//包含 “张三” 或 ”李四“
* String queryString="id:[1 TO 5]";//查询 1<=id<=5
* String queryString="id:{1 TO 5}";//查询 1<id<5
* String queryString="title:\"中国\" AND NOT title:\"张三\" AND id:[1 TO 5]";
* String queryString="title:(中国 张三)";即包含 “中国” 又包含 ”张三“
---------------------------------------------------------------------------------*/
String queryString="title:\"中国\""; Analyzer analyzer = new StandardAnalyzer(); //StandardAnalyzer:汉字一个一个字拆分索引
Directory dir = FSDirectory.open(Paths.get("E:\\LuceneIndex")); //获取索引存储的位置
IndexReader reader = DirectoryReader.open(dir);
IndexSearcher is = new IndexSearcher(reader);
QueryParser parser=new QueryParser("", analyzer);
parser.setDefaultOperator(Operator.AND);//默认状态下,空格被认为是OR的关系,设置为空格为AND
Query query = parser.parse(queryString);
//排序
Sort sort = new Sort(new SortField("dt", Type.LONG, true));
TopDocs topDocs = is.search(query, 20,sort);
System.out.println("总共匹配多少个:" + topDocs.totalHits);
//获取查询结果集
ScoreDoc[] hits = topDocs.scoreDocs;
//遍历结果集
for (ScoreDoc scoreDoc : hits) {
//System.out.println("匹配得分:" + scoreDoc.score);
//System.out.println("文档索引ID:" + scoreDoc.doc);
Document document = is.doc(scoreDoc.doc);
System.out.println(document.get("id")+"-"+document.get("name")+"-"+document.get("dt")+"-"+document.get("title"));
}
reader.close();
dir.close();
}
}

  

第六步:Lucene查询索引的更多相关文章

  1. Lucene.net(4.8.0) 学习问题记录六:Lucene 的索引系统和搜索过程分析

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  2. lucene查询索引之QueryParser解析查询——(八)

    0.语法介绍:

  3. lucene查询索引之Query子类查询——(七)

    0.文档名字:(根据名字索引查询文档)

  4. 搜索引擎学习(三)Lucene查询索引

    一.查询理论 创建查询:构建一个包含了文档域和语汇单元的文档查询对象.(例:fileName:lucene) 查询过程:根据查询对象的条件,在索引中找出相应的term,然后根据term找到对应的文档i ...

  5. Lucene查询索引

    索引创建 以新闻文档为例,每条新闻是一个document,新闻有news_id.news_title.news_source.news_url.news_abstract.news_keywords这 ...

  6. lucene查询索引库、分页、过滤、排序、高亮

    2.查询索引库 插入测试数据 xx.xx. index. ArticleIndex @Test public void testCreateIndexBatch() throws Exception{ ...

  7. 第六步:Lucene查询索引(优化一)

    package cn.harmel.lucene; import java.io.IOException; import java.nio.file.Paths; import org.apache. ...

  8. Lucene查询索引(分页)

    分页查询只需传入每页显示记录数和当前页就可以实现分页查询功能 Lucene分页查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录 package c ...

  9. lucene&solr学习——创建和查询索引(代码篇)

    1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...

随机推荐

  1. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

  2. 使用UpdLock来扣减库存

    UPDLOCK.UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改. 当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而 ...

  3. Java初学(六)

    一.final(最终)可以修饰类.方法.变量 特点:final修饰类,该类不能被继承 final修饰方法,该方法不能被重写(覆盖.重载.复写)        final修饰变量,该变量不能被重新赋值. ...

  4. SQL Server中追踪器Trace的介绍和简单使用

    一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Management Studio>工具>SQL Ser ...

  5. 在xib里,拖一个UIView到UITableView中作为tableHeaderView

    原贴地址:http://blog.csdn.net/haoxinqingb/article/details/41683881 内容 在xib里,拖一个UIView到UITableView中作为tabl ...

  6. 怎样把excel一列分成多列

    1,选定要分列的列. 2,点击“数据”-“分列”. 3,在选项栏中设置如图 4,选择分隔符 4,看,分开了吧!

  7. 转 Xenserver HVM is required for this operation的解决办法

    今天在XenServer中安装虚拟机时出现如下错误: 原因:没有开启XenServer服务器主机的虚拟化支持功能 解决办法:在XenServer主机的BIOS里开启CPU的虚拟化支持功能 本文出自 “ ...

  8. 【整理】Angularjs 监听ng-repeat onfinishrender事件

    http://stackoverflow.com/questions/15207788/calling-a-function-when-ng-repeat-has-finished http://ww ...

  9. Nginx下安装PIP监控软件

    wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gztar zxvf setuptools ...

  10. Nginx反向代理 负载均衡

    nginx 这个轻量级.高性能的 web server 主要可以干两件事情: 〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持): 〉另外一个功能就是作为反向代 ...