lucene--创建searcher
创建searcher的过程
1、创建Directory
2、根据directory创建indexReader
3、根据indexReader创建indexSearcher
4、创建搜索的Query
5、根据searcher搜索并且返回TopDocs
6、根据TopDocs获取ScordDoc对象获取具体的Document对象
7、根据searcher和ScordDoc对象获取具体的Document对象
8、根据Document对象获取需要的值
9、关闭reader
* 搜索* */public void searcher(){try {//1、创建DirectoryDirectory directory = FSDirectory.open(new File("D:/tools/lucene/index01"));//2、根据directory创建indexReaderIndexReader indexReader = IndexReader.open(directory);//3、根据indexReader创建indexSearcherIndexSearcher indexSearcher = new IndexSearcher(indexReader);//4、创建搜索的Query//创建parser来确定搜索文件的内容,第二个参数便是搜索的域QueryParser parser = new QueryParser(Version.LUCENE_35, "context",new StandardAnalyzer(Version.LUCENE_35));//创建query,表示搜索的域为context中的java的文档 。String java = "java";Query query = parser.parse("helloLucene");//5、根据searcher搜索并且返回TopDocsTopDocs tds = indexSearcher.search(query, 10);//6、根据TopDocs获取ScordDoc对象获取具体的Document对象ScoreDoc[] sds = tds.scoreDocs;for(ScoreDoc scoreDoc : sds){//7、根据searcher和ScordDoc对象获取具体的Document对象Document d = indexSearcher.doc(scoreDoc.doc);//8、根据Document对象获取需要的值System.err.println(d.get("name")+"[]"+d.get("path"));}//9、关闭readerindexReader.clone();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}
上面的4步还可以写成下面的集中形式,但是他们对应的需求就会不同,要灵活运用。
(1)
Query query = new TermQuery(new Term(field,name));TopDocs tds = IndexSearcher.search(query, num);
TermQuery是精确查找,也就是说在Field中查找name
(2)
Query query = new TermRangeQuery(field,start,end,true, true);TopDocs tds = indexSearcher.search(query, num);
term范围查找,举个例子:
private
String[] ids = {
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
};
Query query = new TermRangeQuery(“ids”,1,3,true, true);
就会在ids域中查找1到3的值,第三个参数表示是否包括1,第四个参数表示是否包括3,总起来说就是是否是闭区间。
注意:这种方法不能chazha
(3)
Query query = new PrefixQuery(new Term(field,value));
TopDocs tds = searcher.search(query, num);
根据前缀在域中查找
(4)
Query query = new WildcardQuery(new Term(field,value));
TopDocs tds = searcher.search(query, num);
通配符查找:在传入的value中可以使用通配符:?和*,?表示匹配一个字符,*表示匹配任意多个字符
(5)
BooleanQuery query = new BooleanQuery();
query.add(new TermQuery(new Term("name","zhangsan")), Occur.MUST_NOT);
query.add(new TermQuery(new Term("content","game")),Occur.SHOULD);
TopDocs tds = searcher.search(query, num);
BooleanQuery可以连接多个子查询
* Occur.MUST表示必须出现
* Occur.SHOULD表示可以出现
* Occur.MUSE_NOT表示不能出现
(6)
FuzzyQuery query = new FuzzyQuery(new Term("name","mase"));System.out.println(query.getPrefixLength());System.out.println(query.getMinSimilarity());TopDocs tds = searcher.search(query, num);
模糊查找,可以相差一个单词
转载于:https://my.oschina.net/winHerson/blog/82194
lucene--创建searcher相关推荐
- 【示例】Lucene创建索引库编程步骤
[示例]Lucene创建索引库编程步骤
- lucene创建索引_Lucene概述第一部分:创建索引
lucene创建索引 介绍 我最近一直在与开源搜索引擎Lucene合作 . 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总 ...
- lucene 创建索引慢的问题
网上随便一搜都能搜到很多关于lucene的教程,这里就不细展开了.简单说下过程: IndexWriterConfig indexWriterConfig = new IndexWriterConfig ...
- lucene创建索引时出错:扑捉到FileNotFoundException
lucene创建索引文件出错,如下图: 解决方案: 解锁即可 代码如下: bool isUpdate = IndexReader.IndexExists(directory);if (isUpdate ...
- Lucene创建索引入门案例
最近在学习lucene,参考网上的资料写了一个简单搜索demo: 项目jar包: //索引关键类 <pre name="code" class="java" ...
- lucene创建索引
1.导入jar包 2.创建实体Bean package com.zhishang.lucene;/*** Created by Administrator on 2017/7/8.*/ public ...
- 搜索引擎学习(二)Lucene创建索引
PS:需要用到的jar包: 代码实现 1.工程结构 2.设置工程依赖的jar包 3.代码实现 /*** Lucene入门* 创建索引*/ public class CreateIndex {/*** ...
- 孔浩Lucene创建和域选项
一.域索引选项: //Field.Index(索引域选项) //Index.ANALYZED:进行分词和索引,适用于标题.内容等 //Index.NOT_ANALYZED:进行索引,但是不进行分词,如 ...
- Lucene概述第一部分:创建索引
介绍 我最近一直在与开源搜索引擎Lucene合作 . 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总体上很清楚. Luce ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
最新文章
- range.clonecontents 不准确_家长注意!通州今起开展幼升小数据调查,不参加或影响明年入学...
- day11-(cookiesession)
- win10添加美式键盘_win10玩dnf卡顿,怎么解决?
- 经典论文复现 | InfoGAN:一种无监督生成方法
- 桂林电子科技大学计算机导论,Welcome to Guilin University of Electronic Technology(桂林电子科技大学)...
- HTML5新增的主体结构元素
- socket read time out解决方法_time_after方法对jiffies回绕问题的解决
- NOX的使用之学习篇【一】
- HDU.1004 Let the Balloon Rise
- AI、大数据、中台、AIoT、Fintech等十余场火热专题应有尽有,年度盛会BDTC 2019邀您共赴!...
- [Android] [Java] Process 创建+控制+分析 经验浅谈
- 游戏开发物理引擎PhysX研究系列:通过Unity中的物理系统学习Physx指引贴
- 给你入冬后的第一杯奶茶
- 电脑开机黑屏有鼠标怎么办
- Android ble开发详解
- DigitalPersona Personal 4 x86 下载
- ElementUI 表单单个验证
- 大数据挖掘技术在金融保险行业中的用途
- 女博士代码能力太差被程序员嘲笑!
- MySQL尚硅谷笔记
热门文章
- 宏景eHR SQL注入漏洞复现(CNVD-2023-08743)
- 1075:药房管理(C C++)
- linux3.2.0块设备及nandflash驱动框架
- mysql5.7 win2003安装_mysql 5.7 win系统安装
- 局域网WiFi与移动蜂窝网4G第二弹——攻击和防御
- org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is ‘com/hujin
- 关于“7个好习惯”的简单概述
- 双录、可回溯政策再升级,元核云音视频产品护航金融交易合规高效
- querywrapper多条件查询
- 2022-2028全球与中国活动传感和多导睡眠图记录设备市场现状及未来发展趋势