热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene7.2.1系列(二)luke使用及索引文档的基本操作

lucene7,2,1,系列,二,luke,使用,及,索引,

系列文章:

Lucene系列(一)快速入门

Lucene系列(二)luke使用及索引文档的基本操作

Lucene系列(三)查询及高亮

luke入门

简介:

github地址:https://github.com/DmitryKey/luke

下载地址:https://github.com/DmitryKey/luke/releases
luke图标
Luke是一个用于Lucene/Solr/Elasticsearch 搜索引擎的,方便开发和诊断的 GUI(可视化)工具。

它有以下功能:

  • 查看文档并分析其内容(用于存储字段)
  • 在索引中搜索
  • 执行索引维护:索引运行状况检查;索引优化(运行前需要备份)
  • 从hdfs读取索引
  • 将索引或其部分导出为XML格式
  • 测试定制的Lucene分析工具
  • 创建自己的插件

luke适用的搜索引擎

  • Apache Lucene. 大多数情况下,luke可以打开由纯Lucene生成的lucene索引。 现在人们做出纯粹的Lucene索引吗?
  • Apache Solr. Solr和Lucene共享相同的代码库,所以luke很自然可以打开Solr生成的Lucene索引。
  • Elasticsearch. Elasticsearch使用Lucene作为其最低级别的搜索引擎基础。 所以luke也可以打开它的索引!

下载安装与简单使用

下载安装

1.
1

  1. 2

3.
3
4.
4

  1. 5

索引文档的CRUD操作

  1. 创建项目并添加Maven依
  junit junit 4.12 test     org.apache.lucene lucene-core 7.2.1    org.apache.lucene lucene-queryparser 7.2.1    org.apache.lucene lucene-analyzers-common 7.2.1 

我们下面要用到单元测试,所以这里我们添加了Junit单元测试的依赖(版本为4.12,2018/3/30日最新的版本)

  1. 相关测试代码

主方法:

package lucene_index_crud; 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.document.Field; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.junit.Test; public class Txt1 { // 下面是测试用到的数据 private String ids[] = { "1", "2", "3" }; private String citys[] = { "qingdao", "nanjing", "shanghai" }; private String descs[] = { "Qingdao is a beautiful city.", "Nanjing is a city of culture.", "Shanghai is a bustling city." }; //Directory对象 private Directory dir; }

相关测试方法编写:

1)测试创建索引

 /** * 创建索引 * @throws Exception */ @Test public void testWriteIndex() throws Exception { //写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexWriter writer = getWriter(); for (int i = 0; i 

通过luke查看相关信息:
desc
city
id

注意: 创建索引之后,后续测试方法才能正确运行。

2)测试写入了几个文档:

 /** * 测试写了几个文档 * * @throws Exception */ @Test public void testIndexWriter() throws Exception { //写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexWriter writer = getWriter(); System.out.println("写入了" + writer.numDocs() + "个文档"); writer.close(); }

testIndexWriter()
3)测试读取了几个文档:

 /** * 测试读取了几个文档 * * @throws Exception */ @Test public void testIndexReader() throws Exception { //写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexReader reader = DirectoryReader.open(dir); System.out.println("最大文档数:" + reader.maxDoc()); System.out.println("实际文档数:" + reader.numDocs()); reader.close(); }

testIndexReader()
4)测试删除 在合并前:

 /** * 测试删除 在合并前 * * @throws Exception */ @Test public void testDeleteBeforeMerge() throws Exception { //写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexWriter writer = getWriter(); System.out.println("删除前:" + writer.numDocs()); writer.deleteDocuments(new Term("id", "1")); writer.commit(); System.out.println("writer.maxDoc():" + writer.maxDoc()); System.out.println("writer.numDocs():" + writer.numDocs()); writer.close(); }

testDeleteBeforeMerge()
5)测试删除 在合并后:

我们这里先把dataindex目录下的文件删除,然后运行上面的testWriteIndex() 方法之后再测试。

 /** * 测试删除 在合并后 * * @throws Exception */ @Test public void testDeleteAfterMerge() throws Exception { //写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexWriter writer = getWriter(); System.out.println("删除前:" + writer.numDocs()); writer.deleteDocuments(new Term("id", "1")); writer.forceMergeDeletes(); // 强制删除 writer.commit(); System.out.println("writer.maxDoc():" + writer.maxDoc()); System.out.println("writer.numDocs():" + writer.numDocs()); writer.close(); }

testDeleteAfterMerge()
6)测试更新操作:

我们这里先把dataindex目录下的文件删除,然后运行上面的testWriteIndex() 方法之后再测试。

 /** * 测试更新 * * @throws Exception */ @Test public void testUpdate() throws Exception { // 写入索引文档的路径 dir = FSDirectory.open(Paths.get("D:\\lucene\\index_crud\\indexdata")); IndexWriter writer = getWriter(); Document doc = new Document(); doc.add(new StringField("id", "1", Field.Store.YES)); doc.add(new StringField("city", "beijing", Field.Store.YES)); doc.add(new TextField("desc", "beijing is a city.", Field.Store.NO)); writer.updateDocument(new Term("id", "1"), doc); writer.close(); }

desc
city

欢迎关注我的微信公众号(分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):
微信公众号

Lucene我想暂时先更新到这里,仅仅这三篇文章想掌握Lucene是远远不够的。另外我这里三篇文章都用的最新的jar包,Lucene更新太快,5系列后的版本和之前的有些地方还是有挺大差距的,就比如为文档域设置权值的setBoost方法6.6以后已经被废除了等等。因为时间有限,所以我就草草的看了一下Lucene的官方文档,大多数内容还是看java1234网站的这个视频来学习的,然后在版本和部分代码上做了改进。截止2018/4/1,上述代码所用的jar包皆为最新。

最后推荐一下自己觉得还不错的Lucene学习网站/博客:

官方网站:Welcome to Apache Lucene

Github:Apache Lucene and Solr

Lucene专栏

搜索系统18:lucene索引文件结构

Lucene6.6的介绍和使用


推荐阅读
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
  • javajigsaw2015年12月1日,星期二,在OpenJDK邮件列表中,MarkReinhold确认了许多人的期望:J ... [详细]
  • solr进阶七:与jQuery结合的自动补全功能
    网上有大量的jQuery自动补全功能的插件,我实现这个功能是采用网友写好的纯jQuery代码,而不是采用插件,因为特效会差很多。而后台的数据是从solr那边获取过来,通过整理,放到对象中,再放到 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • Flink使用java实现读取csv文件简单实例首先我们来看官方文档中给出的几种方法:首先我们来看官方文档中给出的几种方法:第一种:Da ... [详细]
  • Hadoop之Yarn
    目录1Hadoop1.x和Hadoop2.x架构区别2Yarn概述3Yarn基本架构4Yarn工作机制5作业提交全过程6资源调度器7任务的推测执行1Hadoop1.x和Hadoo ... [详细]
  • hbase伪集群搭建
    hbase数据存储有三种跑法,跑在本地磁盘上、跑在伪分布式上、跑在完全分布式上--------额。。。官网的文档挺坑爹的,结合官网、百度、谷歌的各种 ... [详细]
  • 介绍怎样在IntellijIdea中通过创建mavenproject配置MapReduce的编程环境。一、软件环境我使用的软件版本号例如以下:IntellijIdea2017.1M ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • 首先我们在taotao-search-interface工程中新建一个SearchService接口,并在接口中添加一个方法,如下图所示。接着,我们到taotao-search-s ... [详细]
  • solr倒排索引(转载)
    原文地址:http:blog.csdn.netchichengitarticledetails9235157http:blog.csdn.netnjpjsoftdevarticle ... [详细]
  • Flume 开源分布式日志收集系统
    为什么80%的码农都做不了架构师?Flume--开源分布式日志收集系统Flume是Cloudera提供的一个高可用的、高可靠的开源分布式海量日志收集系统 ... [详细]
author-avatar
mobiledu2502923043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有