lucene&solr学习——创建和查询索引(代码篇)
1. Lucene的下载
Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压。
官网:http://lucene.apache.org/
版本:lucene7.7.0 (学习上没必要最新的,因为企业中也不会升级太快)
Jdk要求:1.7以上
2.使用的jar包
核心包
其他:
3. 创建索引库
(1) 实现步骤 (程序的编写步骤与之前分析的理论步骤是颠倒过来的)
第一步:创建java工程,并导入jar包
第二步:创建一个indexwriter对象(创建索引)
1.指定索引库的存放位置Directory对象
2.指定一个分析器,对文档内容进行分析
第三步:创建document对象 (构建文档对象)
第四步:创建field对象,将field添加到document
第五步:使用indexwriter对象将document对象写到索引库,此过程进行索引创建。并将索引和document对象写入索引库。
第六步:关闭IndexWriter对象
(2) Field域的属性
是否分析:是否对域的内容进行分词处理。前提是我们要对域的内容进行查询。
是否索引:将Field分析后的词或整个Field值进行索引,只有索引方可搜索到。
比如:商品名称,商品简介分析后进行索引,订单号,身份证号不用分析但也要索引,这些将来都要作为查询条件
是否存储:将Field值存储在文档中,存储在文档中的Field才可以从Document中获取。
比如:商品名称,订单号,凡是将来要从Document中获取的Field都要存储
是否存储的标准:是否将内容展示给用户
测试代码:
将下面的文件,创建成索引
代码:
public class FirstLucene { @Test
public void textIndex() throws Exception {
// 第一步:创建java工程,并导入jar包
// 第二步:创建一个indexwriter对象(创建索引)
// 1.指定索引库的存放位置Directory对象
Directory directory = FSDirectory.open(Paths.get("E:\\temp\\index")); //文件系统目录 file system directory
// 2.指定一个分析器,对文档内容进行分析
Analyzer analyzer = new StandardAnalyzer();//官方推荐分词器
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
File f = new File("E:\\searchSource");
File[] listFiles = f.listFiles();
for (File file : listFiles) {
// 第三步:创建document对象 (构建文档对象)
Document document = new Document();
// 第四步:创建field对象,将field添加到document
//文件名称
String file_name = file.getName();
Field fieldNameField = new TextField("fileName", file_name, Store.YES);
//文件大小
long file_size = FileUtils.sizeOf(file);
Field fileSizeField = new LongPoint("fileSize", file_size);
Field fileSizeFieldStore = new StoredField("fileSize", file_size);
//文件路径
String file_path = file.getPath();
Field filePathField = new StoredField("filePath", file_path);
//文件内容
String file_content = FileUtils.readFileToString(file);
Field fileContentField = new TextField("fileContent", file_content, Store.NO); document.add(fieldNameField);
document.add(fileSizeField);
document.add(fileSizeFieldStore);
document.add(filePathField);
document.add(fileContentField); // 第五步:使用indexwriter对象将document对象写到索引库,此过程进行索引创建。并将索引和document对象写入索引库。
indexWriter.addDocument(document);
}
// 第六步:关闭IndexWriter对象
indexWriter.close(); }
}
结果:
4.查询索引
(1) 实现步骤:
第一步:创建一个Directory对象,也就是索引库存放的位置
第二步:创建一个indexReader对象,需要制定Directory对象
第三步:创建一个indexsearcher对象,需要指定IndexReader对象
第四步:创建一个TermQuery对象,制定查询的域和查询的关键词
第五步:执行查询。
第六步:返回查询结果,便利查询结果并输出
第七步:关闭IndexReader对象。
(2) IndexSearcher搜索方法
代码:
@Test
public void testSearch() throws Exception {
// 第一步:创建一个Directory对象,也就是索引库存放的位置
Directory directory = FSDirectory.open(Paths.get("E:\\temp\\index"));
// 第二步:创建一个indexReader对象,需要指定Directory对象
IndexReader indexReader =DirectoryReader.open(directory);
// 第三步:创建一个indexsearcher对象,需要指定IndexReader对象
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 第四步:创建一个TermQuery对象,制定查询的域和查询的关键词
Query query = new TermQuery(new Term("fileName", "spring"));
// 第五步:执行查询。
TopDocs topDocs = indexSearcher.search(query, 2);
// 第六步:返回查询结果,遍历查询结果并输出
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
int doc = scoreDoc.doc;
Document document = indexSearcher.doc(doc);
//文件名称
String fileName = document.get("fileName");
System.out.println(fileName);
//文件内容
String fileContent = document.get("fileContent");
System.out.println(fileContent);
//文件路径
String fileSize = document.get("fileSize");
System.out.println(fileSize);
//文件大小
String filePath = document.get("filePath");
System.out.println(filePath);
System.out.println("---------");
}
// 第七步:关闭IndexReader对象。
indexReader.close();
}
结果:
lucene&solr学习——创建和查询索引(代码篇)的更多相关文章
- lucene&solr学习——创建和查询索引(理论)
1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...
- lucene&solr学习——solr学习(二) Solr管理索引库
1.什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 依赖jar包: 2 ...
- lucene&solr学习——solr学习(一)
1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...
- lucene&solr学习——索引维护
1.索引库的维护 索引库删除 (1) 全删除 第一步:先对文档进行分析 public IndexWriter getIndexWriter() throws Exception { // 第一步:创建 ...
- lucene&solr学习——分词器
下图是语汇单元的生成过程: 从一个Reader字符流开始,创建基于Reader的Tokenizer分词器,经过三个TokenFilter生成语汇单元Tokens. 要看分词器的分析效果,只需要看Tok ...
- 学习笔记:vue(代码篇)
http://cn.vuejs.org/ VUE官网 http://cn.vuejs.org/v2/guide/ 教程 VUE模板文件: <html lang="zh-cn" ...
- solr 学习片段
全文检索技术——Solr 1 主要内容 1.站内搜索技术选型 2.什么是solr Solr和lucene的区别 3.solr服务器的安装及配置 Solr整合tomcat Solr的演示 4.维护索引 ...
- MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引
这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...
- 《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索
第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念: 1.Lucene由两部分组成:索引和搜索.索引是通过对原始数据的解析,形成索引的过程:而搜索则是针对用户输入的查找要求,从索引中找到匹配 ...
随机推荐
- 18 Command Line Tools to Monitor Linux Performance
By Ravi Saive Under: Linux Commands, Monitoring Tools On: December 26, 2013 http://www.tecmint.com/c ...
- D3(v5) in TypeScript 坐标轴之 饼状图生成
饼状图生成时依旧遇到了类型问题,记录如下: import * as d3 from 'd3'; import * as React from 'react'; class TestGraph exte ...
- openssl命令使用
openssl openssl是个密码工具集,提供多端接口调用方式 组成: 1. 代码库 libcryto ,libssl(ssl/tls) 2. 工具集 openssl 对称加密 对称加密主要是用a ...
- IO流之Properties类
Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: 1.Hashtable的 ...
- java常用API之System类
System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象.System类中的都是static方法,类 ...
- Python爬虫实战:将网页转换为pdf电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- Java & COM
- LeetCode刷题系列——Add Two Numbers
题目链接 这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作). class ListNode{ int val; ListNode next; ListNo ...
- Informatica学习笔记
Informatica学习笔记1:UPDATE AS INSERT 问:要求实现每天抽取数据,而且是如果有改变才抽取更新,没有就不更新,因为源表中有最后修改时间的字段,我让它 和SESSION上次运行 ...
- Redis安装及配置
Redis缓存数据库 借鉴出处 http://www.runoob.com/redis/redis-install.html http://www.runoob.com/redis/redis-con ...