Lucene 快速入门

30分钟,快速上手Lucene v7.4.0 Lucene截止目前,最新版本为v7.4.0。它是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。 目录: 1 Lucene环境相关 2 Add External JARs…(右击项目->Build Path) 3 配置git 4 Lucene v7.4... 阅读详情

Lucene使得全文索引这项技术活变得非常简单,我将用5分钟做个快速展示。

1.建立索引  这个例子展示的是在内存中为几个String建立索引

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);
Directory index = new RAMDirectory();

IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);

IndexWriter w = new IndexWriter(index, config);
addDoc(w, "Lucene in Action", "193398817");
addDoc(w, "Lucene for Dummies", "55320055Z");
addDoc(w, "Managing Gigabytes", "55063554A");
addDoc(w, "The Art of Computer Science", "9900333X");
w.close();

来看addDoc()方法:

private static void addDoc(IndexWriter w, String title, String isbn) throws IOException {
  Document doc = new Document();
  doc.add(new TextField("title", title, Field.Store.YES));
  doc.add(new StringField("isbn", isbn, Field.Store.YES));
  w.addDocument(doc);
}

2.查询 从标准输入读取查询信息,建立Lucene的Query对象

String querystr = args.length > 0 ? args[0] : "lucene";
Query q = new QueryParser(Version.LUCENE_44, "title", analyzer).parse(querystr);

3.查找 利用2产生的Query对象建立Searcher对象在索引中查找

int hitsPerPage = 10;
IndexReader reader = IndexReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;

4.显示 显示查找结果

System.out.println("找到 " + hits.length + " hits.");
for(int i=0;i<hits.length;++i) {
    int docId = hits[i].doc;
    Document d = searcher.doc(docId);
    System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));
}

完整的Java代码:

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.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.Version;

import java.io.IOException;

public class HelloLucene {
  public static void main(String[] args) throws IOException, ParseException {
    // 0. analyzer 
    //    
    StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_44);

    // 1. index
    Directory index = new RAMDirectory();

    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_44, analyzer);

    IndexWriter w = new IndexWriter(index, config);
    addDoc(w, "Lucene in Action", "193398817");
    addDoc(w, "Lucene for Dummies", "55320055Z");
    addDoc(w, "Managing Gigabytes", "55063554A");
    addDoc(w, "The Art of Computer Science", "9900333X");
    w.close();

    // 2. query
    String querystr = args.length > 0 ? args[0] : "lucene";

  
    Query q = new QueryParser(Version.LUCENE_44, "title", analyzer).parse(querystr);

    // 3. search
    int hitsPerPage = 10;
    IndexReader reader = DirectoryReader.open(index);
    IndexSearcher searcher = new IndexSearcher(reader);
    TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
    searcher.search(q, collector);
    ScoreDoc[] hits = collector.topDocs().scoreDocs;
   
    // 4. display 
    System.out.println("找到 " + hits.length + " hits.");
    for(int i=0;i<hits.length;++i) {
      int docId = hits[i].doc;
      Document d = searcher.doc(docId);
      System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title"));
    }

    reader.close();
  }

  private static void addDoc(IndexWriter w, String title, String isbn) throws IOException {
    Document doc = new Document();
    doc.add(new TextField("title", title, Field.Store.YES));
    doc.add(new StringField("isbn", isbn, Field.Store.YES));
    w.addDocument(doc);
  }
}










Lucene快速入门 这是一份Lncene快速入门的文档,文档里包括入门的代码实例以及工作原理和查询设置等一些常用到的Lucene知识 立即下载

相关推荐

实战分享:如何用YOLOv5s+BIFPN高效检测隧道裂缝(附数据集获取)

本文详细介绍了如何利用YOLOv5s结合BIFPN(双向特征金字塔网络)构建高效的隧道裂缝智能检测系统。文章从高质量数据集构建、针对性数据增强、模型架构选型与调优,到工程化部署全链路进行了实战分享,旨在为基础设施自动化巡检提供兼顾精度与速度的解决方案。

weixin_29062823的博客 380

快速入门Lucene--只需3步--关键词搜索框架之Lucene

前言 我们团队目前在研究主题搜素引擎,在研究主题搜索引擎的时候就为了有个对比,就去简单了研究了一下lucene这个框架,然后从搭建到实现lucene的功能给大家分享一下 学习之中遇到的问题 首先是找不到对比文本,比如一段文字,怎么区分是哪个领域的,想过用json和map进行区分,而且当时找了很多教程都不知道他们用的实例文本是什么样子的。 查询的方式,Lucene之模糊、精确、匹配、...

j18423532754的博客 544

Linux初级介绍之番外篇:Linux挂载windows中的共享目录

挂载windows共享目录Windows端共享权限设定解禁Guest设置共享目录权限Linux挂载端扫描共享目录挂载共享目录遇到错误的解决方案 Windows端共享权限设定 解禁Guest 右击我的电脑选择管理–>本地用户和组–>在用户项中双击Guest用户–>取消账号已禁用选项 设置共享目录权限 右击共享目录点属性–>在共享页面中点击共享选项–>下拉选择共享对象为Everyone–>点击共享按钮 3.设置本地策略 打开命令框–>输入secpol.msc–&gt

m0_53497201的博客 228

Lucene+ElasticSearch入门至项目实战(Java高级、架构师必备套餐)

课程提供所有代码笔记素材以及答疑 1、熟练掌握Lucene框架的使用,实现类似百度、京东商城等应用的全文检索效果; 2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、java api 操作 ES 7、电商项目实战应用等等 .....

UNet 改进(19):与ASPP结合的图像分割模型

这个代码实现了一个改进版的UNet模型,在传统的UNet架构基础上,引入了ASPP模块来增强模型捕获多尺度上下文信息的能力。​​UNet主干网络​​:经典的编码器-解码器结构,带有跳跃连接​​ASPP模块​​:位于瓶颈层,用于提取多尺度特征。

2401_82355416的博客 877

【UE5】RTS游戏的框选功能+行军线效果实现

步骤: 一、项目准备; 二、框选NPC并移动到指定地点; 三、框选效果; 四、行军线效果

ChaoChao66666的博客 2378

Lucene系列(一)快速入门

系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 Lucene是什么? Lucene在维基百科的定义 Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开...

weixin_34185560的博客 802

【好物推荐】MQTTX 快速入门使用指南

摘要:MQTTX是一款跨平台MQTT客户端工具,支持MQTT 5.0/3.1.1协议,提供桌面版、网页版和CLI版本。本文介绍了快速入门指南,包括下载安装、核心概念解释、连接公共MQTT服务器(broker.emqx.io)的步骤,以及订阅主题、发布和接收消息的操作流程。文章还提供了常见问题排查方法,帮助用户快速完成MQTT开发调试的基本操作。

奶爸的编程之路,也就一周冷个三天 860

Apache Lucene Server 快速入门与实战指南

Apache Lucene Server 快速入门与实战指南 项目介绍 Apache Lucene Server 是一个基于Apache Lucene构建的高性能HTTP REST服务层,旨在简化Lucene的索引与搜索功能在分布式环境中的集成与访问。它利用RESTful API接口,提供了一种简单而高效的方式,使开发人员能够通过JSON格式轻松地对Lucene的核心以及模块化功能进行访问。本项目...

gitblog_00066的博客 471

RT-DETR改进策略【小目标改进】| Shape-NWD:融合改进,结合Shape-IoU和NWD 更好地适应小目标特性

Bw−wgt2h−hgt2weight2Bweight2w−wgt​2h−hgt​2​其中weight2weight = 2weight2。

Limiiiing的博客 1544

基于RK3568的YOLOv11模型端侧推理优化与部署实战指南

在AI边缘计算领域,瑞芯微RK3568芯片凭借其强大的NPU算力和丰富的接口资源,成为了众多开发者的首选平台。然而,瑞芯微官方文档虽然提供了YOLO11预训练模型的部署方案,但对于需要自定义数据集训练的开发者来说,从模型训练到板端部署的完整流程却缺乏详细指导。本文将带你走完从环境搭建、数据准备、模型训练到最终板端部署的完整技术路线,并分享实际开发中遇到的各种坑点和解决方案。让我们一起探索如何在RK3568平台上实现30FPS稳定推理的YOLO11目标检测应用!

m0_64661770的博客 115

lucene快速入门

 lucene快速入门 Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene 的,比如 Ecli

gotohbu的专栏 669

Python FastAPI 面试题及参考答案

FastAPI 的路由机制是其核心功能之一,用于将不同的 URL 路径映射到相应的处理函数。通过定义路由,可以构建出功能丰富的 API。在 FastAPI 中,使用装饰器来定义路由。在这个示例中,是一个装饰器,它将根路径"/"的 GET 请求映射到read_root函数。当客户端发送一个 GET 请求到根路径时,FastAPI 会调用read_root函数并返回结果。

大模型大数据攻城狮的专栏 2246

Lucene第一篇【介绍Lucene、快速入门】

什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的架构,提供了完整的创建索引和查询索引,以及部分文本分析的引擎,Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎,Lucene在全文检索

zhong_fucheng 647

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Lucene快速入门第二讲——首次使用Lucene,开不开心!

全文检索技术学习(二)——配置Lucene的开发环境Lucene下载Lucene是开发全文检索功能的工具包,可从官方网站http://lucene.apache.org/ 下载,这里我下载的是Lucene4.10.3,所以后续有关Lucene的讲解都是基于这个版本的。下载之后解压。 注意:Lucene4.10.3这个版本要求JDK的版本至少是1.7。比较幸运的是,本人使用的JDK的版本是1.8。

李阿昀的博客 2802

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Lucene的快速入门

一.执行流程 0.图解 1.创建索引 (1)获取原始文档 基于那些文档进行搜索,那就是原始文档。 通过爬虫可以获取原始文档。 (2)构建文档对象 对应每一个原始文档,并创建一个document对象。 一个document对象可以有多个域(field)。 域中保存的就是原始文档的属性。 其中属性包含域的名称和域的值。 每个文档都有唯一的编号,就是文档id。 (3)分析文档 就是分词的过程。 1....

qq_45421186的博客 259

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Lucene全文检索快速入门

Lucene 是一个开源的全文检索引擎库,广泛应用于各种搜索场景。以下是关于 Lucene 的基本概念和操作方法。进行检索,通过查询语句匹配文档。如果需要更具体的题目解答,可以提供题目内容或需求细节。对象,用于将文档写入索引。

kZuXaBvxup的博客 294

Lucene快速入门第一讲——你总得知道Lucene是个啥?

本文我将为大家讲解全文检索技术——Lucene,现在这个技术用到的比较多,我觉得大家还是应该掌握一下,不说多精通,但是应该有所了解。在讲解之前,我们先来看一个案例,通过该案例引出全文检索技术——Lucene。案例实现一个文件的搜索功能,通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来。还可以根据中文词语进行查询,并且需要支持多个条件查询。本案例中的原始内容就是磁盘上的文件,如下图

李阿昀的博客 6267
上一篇: 为什么Linux不需要磁盘碎片整理
下一篇: Ubuntu(Linux)下安装配置 JDK7
CrazyJMonkey
博客等级 码龄14年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值