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学习——创建和查询索引(代码篇)的更多相关文章

  1. lucene&solr学习——创建和查询索引(理论)

    1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...

  2. lucene&solr学习——solr学习(二) Solr管理索引库

    1.什么是solrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 依赖jar包: 2 ...

  3. lucene&solr学习——solr学习(一)

    1.什么是solr solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文检索服务器.Solr提供了比lucene风味丰富的查询语言,同时实现了可配置,可扩展,并对索 ...

  4. lucene&solr学习——索引维护

    1.索引库的维护 索引库删除 (1) 全删除 第一步:先对文档进行分析 public IndexWriter getIndexWriter() throws Exception { // 第一步:创建 ...

  5. lucene&solr学习——分词器

    下图是语汇单元的生成过程: 从一个Reader字符流开始,创建基于Reader的Tokenizer分词器,经过三个TokenFilter生成语汇单元Tokens. 要看分词器的分析效果,只需要看Tok ...

  6. 学习笔记:vue(代码篇)

    http://cn.vuejs.org/ VUE官网 http://cn.vuejs.org/v2/guide/  教程 VUE模板文件: <html lang="zh-cn" ...

  7. solr 学习片段

    全文检索技术——Solr 1 主要内容 1.站内搜索技术选型 2.什么是solr Solr和lucene的区别 3.solr服务器的安装及配置 Solr整合tomcat Solr的演示 4.维护索引 ...

  8. MongoDB索引(一) --- 入门篇:学习使用MongoDB数据库索引

    这个系列文章会分为两篇来写: 第一篇:入门篇,学习使用MongoDB数据库索引 第二篇:进阶篇,研究数据库索引原理--B/B+树的基本原理 1. 准备工作 在学习使用MongoDB数据库索引之前,有一 ...

  9. 《Lucene in Action》(第二版) 第一章节的学习总结 ---- 用最少的代码创建索引和搜索

    第一章节是介绍性质,但是通过这一章节的学习,我理解到如下概念: 1.Lucene由两部分组成:索引和搜索.索引是通过对原始数据的解析,形成索引的过程:而搜索则是针对用户输入的查找要求,从索引中找到匹配 ...

随机推荐

  1. 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 ...

  2. D3(v5) in TypeScript 坐标轴之 饼状图生成

    饼状图生成时依旧遇到了类型问题,记录如下: import * as d3 from 'd3'; import * as React from 'react'; class TestGraph exte ...

  3. openssl命令使用

    openssl openssl是个密码工具集,提供多端接口调用方式 组成: 1. 代码库 libcryto ,libssl(ssl/tls) 2. 工具集 openssl 对称加密 对称加密主要是用a ...

  4. IO流之Properties类

    Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. 特点: 1.Hashtable的 ...

  5. java常用API之System类

    System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作.System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象.System类中的都是static方法,类 ...

  6. Python爬虫实战:将网页转换为pdf电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  7. Java & COM

  8. LeetCode刷题系列——Add Two Numbers

    题目链接 这个题目很简单,归并而已,好久没练编程,居然忘了在使用自定义类型前,要进行初始化(new操作). class ListNode{ int val; ListNode next; ListNo ...

  9. Informatica学习笔记

    Informatica学习笔记1:UPDATE AS INSERT 问:要求实现每天抽取数据,而且是如果有改变才抽取更新,没有就不更新,因为源表中有最后修改时间的字段,我让它 和SESSION上次运行 ...

  10. Redis安装及配置

    Redis缓存数据库 借鉴出处 http://www.runoob.com/redis/redis-install.html http://www.runoob.com/redis/redis-con ...