Lucene 4 和 Solr 4 学习笔记(3)

lucene、solr区别 Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎. Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索 阅读详情

    当初说要写写lucene和solr的学习笔记,写了两个后就懒得写了。最近想做个lucene和solr的中文学习网站,翻译一些lucene和solr的英文资料,并提供一个中文的交流学习平台。所以想把这个系列继续下去。

    言归正传,上面说到我们的目标是学习和修改lucene/solr的源代码。不过如果我们从没有用过,那是不可能读懂源代码的。这里推荐《lucene in action》第二版,中文版也有,网上能够下载到英文版的,建议阅读英文版。这本书的第一作者Michael McCandless是现在Lucene PMC的成员,他的blog可以关注一下

http://blog.mikemccandless.com,另外两个作者是本书第一版的作者,好像现在在lucene和solr的开发中不是特别活跃,在lucene和solr的邮件列表中没怎么见过。

   下面我们简单的学习(或者复习)一下Lucene的建索引过程,我们将给出lucene 2.x/3.x 和 最新trunk正在开发的4.0的建立索引的方法,尤其是它们的区别。

    Lucene 2.x/3.x里建立索引并进行简单搜索的例子

	Directory dir=FSDirectory.open(new File("./testindex"));
	for(String fn:dir.listAll()){
	    dir.deleteFile(fn);
	}
	IndexWriter writer=new IndexWriter(dir,new WhitespaceAnalyzer(Version.LUCENE_36),IndexWriter.MaxFieldLength.UNLIMITED);
	Document doc=new Document();
	doc.add(new Field("id","0001",Field.Store.YES,Field.Index.NOT_ANALYZED));
        doc.add(new Field("body","hello world, this is text body part. ",Field.Store.NO,Field.Index.ANALYZED));
        doc.add(new Field("clickCount","10",Field.Store.YES,Field.Index.NO));
        writer.addDocument(doc);
	    
        doc=new Document();
	doc.add(new Field("id","0002",Field.Store.YES,Field.Index.NOT_ANALYZED));
        doc.add(new Field("body","good bye. that is it. ",Field.Store.NO,Field.Index.ANALYZED));
	doc.add(new Field("clickCount","3",Field.Store.YES,Field.Index.NO));
	writer.addDocument(doc);
	    
	writer.close();
	    
	IndexReader reader=IndexReader.open(dir);
	IndexSearcher searcher=new IndexSearcher(reader);
	Query q=new TermQuery(new Term("body","is"));
	TopDocs docs=searcher.search(q, 10);
	for(int i=0;i<docs.totalHits;i++){
	      int docId=docs.scoreDocs[i].doc;
	      float score=docs.scoreDocs[i].score;
	      doc=searcher.doc(docId);

	      System.out.println("id="+doc.get("id")+", clickcount="+doc.get("clickCount"));
	}
	reader.close();
   

Lucene 4 里建立索引并进行简单搜索的例子

    Directory dir=FSDirectory.open(new File("./testindex"));
    IndexWriterConfig cfg=new IndexWriterConfig(Version.LUCENE_40,new WhitespaceAnalyzer(Version.LUCENE_40));
    cfg.setOpenMode(OpenMode.CREATE);
    IndexWriter writer=new IndexWriter(dir,cfg);
    Document doc=new Document();
    doc.add(new Field("id","0001",StringField.TYPE_STORED));
    doc.add(new TextField("body","hello world, this is text body part. "));
    doc.add(new DocValuesField("clickcount",10,DocValues.Type.FIXED_INTS_8));
    writer.addDocument(doc);
    
    doc=new Document();
    doc.add(new Field("id","0002",StringField.TYPE_STORED));
    doc.add(new TextField("body","good bye. that is it. "));
    doc.add(new DocValuesField("clickcount",3,DocValues.Type.FIXED_INTS_8));
    writer.addDocument(doc);
    
    writer.close();
    
    IndexReader reader=DirectoryReader.open(dir);
    IndexSearcher searcher=new IndexSearcher(reader);
    Query q=new TermQuery(new Term("body","is"));
    TopDocs docs=searcher.search(q, 10);
    DocValues docValues = MultiDocValues.getDocValues(reader, "clickcount");
    Source source = docValues.getSource();
    for(int i=0;i<docs.totalHits;i++){
      int docId=docs.scoreDocs[i].doc;
 
Elasticsearch、Solr、Lucene 深度对比:架构解析、性能实战与选型指南 Elasticsearch、Solr、Lucene 深度对比:架构解析、性能实战与选型指南。 阅读详情

相关推荐

Elasticsearch 和 solr 的区别

Elasticsearch 和 solr 的区别 背景:它们都是基于Lucene搜索服务器基础之上开发,一款优秀的,高性能的企业级搜索服务器。【是因为他们都是基于分词技术构建的倒排索引的方式进行查询】 开发语言:java语言开发 诞生时间: Solr :2004年诞生。 Es:2010年诞生。 Es 更新【功能越强大】 区别: 当实时建立索引的时候,solr会产生io阻塞,而...

龚道松 3366

第1篇:SOLR 简介与源码环境搭建

它不仅继承了 Lucene 强大的全文搜索能力,还通过封装和扩展,提供了企业级的功能,比如分布式搜索(SolrCloud)、RESTful API、动态 Schema 管理等。Lucene 提供了底层的索引和搜索能力,而 SOLR 在其之上增加了配置管理、HTTP 接口、集群支持等特性,使其更易于部署和使用。本篇介绍了 SOLR 的背景、功能,并完成了源码环境的搭建。通过编译、运行和调试,我们已经迈出了理解 SOLR 内部机制的第一步。通过日志,可以初步了解 SOLR 的启动流程,后续篇章会深入分析。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1057

基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发垂直搜索引擎视频教程

《基于Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发从无到有垂直搜索引擎》 课程讲师:小叶子  课程分类:Java 适合人群:初级 课时数量:69课时 用到技术:Hibernate、Struts、Spring、jQuery、Lucene、Solr、Heritrix 涉及项目:百度文库搜索引擎 咨询QQ:1609173918       垂直搜

xkqueen2的专栏 1928

第2篇:SOLR 的架构总览

在上一篇文章中,我们已经完成了 SOLR 的源码环境搭建,成功运行了一个简单的实例,并初步浏览了源码目录结构。现在,我们将目光转向 SOLR 的整体架构,探索它如何将复杂的功能组织成一个高效的搜索系统。通过本篇,你将了解 SOLR 的核心组件是如何协作的,请求是如何从客户端到达服务器并返回结果的,以及源码中哪些关键类扮演了重要角色。这不仅是后续深入分析的基础,也是理解 SOLR 设计思想的起点。是 SOLR 的执行单元,每个 Core 独立管理自己的索引和配置。的分析,我们理解了请求处理的核心流程。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1354

Java实现全文检索-Solr

Java实现全文检索-SolrSolr是什么?Solr Vs Lucene搭建Solr服务器(Mac系统)Solr搭载IKAnalyer分词器 Solr是什么? Solr是一个基于全文检索的企业级应用服务器;全文检索,可以通过分词来检索数据;应用服务器:它是单独的服务。 Solr Vs Lucene 同为Apache下的应用,Lucene与Solr的区别: Lucene是一个工具包(jar) ,...

qq_39341890的博客 1707

搜索引擎 Solr 简介

1.前言 企业站内搜索技术选型 在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。 单独使用Lucene实现 单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建...

qq_36807862的博客 2214

全文搜索引擎Solr原理和实战教程

Solr的核心是一个Web应用程序,但是由于它是建立在开放的协议之上的,任何类型的客户端应用程序都可以使用Solr。HTTP是客户端应用程序和Solr之间使用的基本协议。客户端提出请求,Solr做一些工作并提供响应。客户使用请求来请求Solr执行查询或索引文件等操作。客户端应用程序可以通过创建HTTP请求和解析HTTP响应到达Solr。客户端API封装了发送请求和解析响应的大部分工作,这使得编写客户端应用程序变得更加容易。客户使用Solr的五个基本操作来与Solr一起工作。

AI天才研究院 1万+

学习ElasticSearch、Solr、Lucene、ELK+kafka的笔记

目录 一、 基础知识 二、ES与solr的区别: 三、Java代码如何正确接入ES? 一、 基础知识 ES如何存数据? ES通过index写入和查询到内存中,数据基本存储在硬盘中,部分数据会存在内存中。 推荐资料地址:https://elasticsearch.cn/article/6178 2. lucene相关知...

Jack章臣的博客 512

【Lucene】Elasticsearch 和 Solr 与 Lucene 的关系是什么?它们各自在 Lucene 之上做了哪些封装和增强?

本文解析了Apache Lucene、Elasticsearch(ES)和Apache Solr三者的技术关系。Lucene作为核心Java搜索库,提供索引构建和查询执行等基础能力,但不具备分布式、API等企业级功能。ES和Solr在Lucene基础上构建了完整的分布式搜索系统: Elasticsearch侧重云原生和实时性,提供: 分布式分片与副本机制 直观的RESTful API和JSON查询DSL 完整的监控生态(Kibana等) Solr更强调企业级特性: 灵活的XML配置驱动 丰富的查询处理器(S

九师兄 55

Elasticsearch、Solr 和 Apache Lucene 三种流行的开源搜索引擎对比

Lucene、Solr 和 Elasticsearch 都是强大的搜索引擎,但它们各自具有不同的特点和优势。Lucene 是一个强大的搜索引擎库,适用于需要高度自定义的应用程序。Solr 是一个完整的搜索服务器,提供了丰富的搜索功能和管理界面。Elasticsearch 是一个分布式搜索引擎,提供了全文搜索、聚合、监控等功能,并支持 RESTful API。在选择搜索引擎时,应根据应用程序的需求和特点来决定使用哪种搜索引擎。

u013558123的博客 1409

Java领域搜索引擎开发:Lucene与Solr应用

在当今信息爆炸的时代,如何快速、准确地从海量数据中找到所需信息成为了一个关键问题。搜索引擎开发应运而生,它可以帮助用户高效地检索信息。本文的目的是深入介绍Java领域中用于搜索引擎开发的两个重要工具:Lucene和Solr。范围涵盖了它们的核心概念、算法原理、实际应用场景、项目实战等方面,旨在让读者全面了解如何使用这两个工具进行搜索引擎的开发。本文将按照以下结构进行组织:首先介绍Lucene和Solr的核心概念与联系,让读者对这两个工具的基本原理和架构有清晰的认识;

AI开发架构师 798

solr5.4.0

应用场景 在百度中搜索“阿凡达”会出来一系列资料,有文本,图片,电影,链接等等,这就是一个搜索引擎实现的,当然百度有自己的搜索引擎,我们可以不用自己写一个搜索引擎,有现成的比如sorl,lucene,ElasticSearch等等,这里介绍一些solr。 1.概述1.1 Solr 是什么? Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中

bingoabin 26万+

ESP-CSI:使用ESP32进行CSI(信道状态信息)采集

使用esp32进行csi(信道状态信息)采集和处理

capsize的博客 8280

Python+whisper/vosk实现语音识别

Whisper 是一个由 OpenAI 开发的人工智能语音识别模型,它能够将语音转换为文本。Whisper 模型特别之处在于它的设计目标是能够理解和转录多种语言的语音,包括但不限于英语。Whisper 模型在训练时使用了大量不同语言的语音数据,这使得它具有很好的跨语言能力。Vosk 是一个开源的语音识别库,它可以在离线环境下工作,不依赖于任何外部服务。Vosk 基于Kaldi语音识别框架,支持多种语言,包括中文。Vosk提供了多种预训练模型,可以根据需求选择适合的模型进行语音识别。

weixin_44458771的博客 5937

OpenRadar Matlab版:毫米波雷达信号处理全流程开源库详解

毫米波雷达数据解析与信号处理是感知领域的基础能力。本文介绍毫米波雷达从ADC原始采样到距离-多普勒(Range-Doppler)热图、CFAR检测、DOA估计直至点云与生命体征参数提取的完整处理链路,并深入讲解OpenRadar(Matlab版)开源库的内核设计、核心API与实测经验。从原理上看,距离FFT与多普勒FFT构成RD谱,CFAR自适应阈值实现目标检测,相位解缠与滤波用于呼吸心跳提取。技术价值在于将繁琐的雷达数据读取、矩阵变换和算法流程标准化,免去重复造轮子。可应用于人员存在感知、生命体征监护、4

weixin_33806859的博客 321

24GHz雷达DIY呼吸监测仪:用树莓派+TI IWR6843搭建生命体征检测系统(附Python代码)

本文详细介绍了如何利用树莓派和TI IWR6843毫米波雷达模块DIY非接触式呼吸监测仪。通过硬件选型、信号处理流水线设计和实时可视化系统搭建,实现高精度的生命体征检测,特别适合医疗健康和运动监测场景。附带的Python代码帮助开发者快速复现该系统。

rl6adventurer的博客 984

论文阅读------Exposure Fusion: A Simple and Practical Alternative to High Dynamic Range Photography

Mertens T, Kautz J, Van Reeth F. Exposure fusion: A simple and practical alternative to high dynamic range photography[C]//Computer graphics forum. Oxford, UK: Blackwell Publishing Ltd, 2009, 28(1): 161-171. 摘要 本文提出了一种将包围曝光的序列融合到高质量图像中的技术,而无需先转换为高动态范围(HD.

qq_25283239的博客 3396

从‘平行’到‘鱼骨’:手把手拆解AlGaN/GaN HEMT多栅指结构的布局优化实战

本文深入探讨了AlGaN/GaN HEMT多栅指结构的布局优化,从传统的平行栅结构到创新的鱼骨栅结构,详细解析了如何通过优化信号路径和热管理提升功率器件的性能。文章结合实测数据和EDA工具,展示了鱼骨栅结构在相位一致性、热阻和版图利用率方面的显著改进,为射频功率放大器设计提供了实用指导。

weixin_27061475的博客 439

C#里使用NModbus来创建一个TCP从站服务

摘要:本文介绍了一个用C#实现的Modbus TCP从站服务器,基于.NET Framework 4.6.1开发。代码使用NModbus库创建TcpListener和ModbusSlaveNetwork,支持设置IP地址、端口号和从站ID。服务器实现了数据存储初始化功能(包括线圈和保持寄存器),并提供了启动/停止操作的UI界面和日志记录功能。该解决方案适用于需要调试Modbus TCP协议的场景,特别适合无法升级到更高版本.NET Framework的环境。

大坡3D软件开发 477

Oracle EBS 如何处理MMT表错误-WIP 实体未定义或不具有期间余额项

错误说明:WIP 实体未定义或不具有期间余额项。(The wip entity is either not defined or does not have a period balance entry)由于工单的创建日期为4月份,工单的余额表记录的期间是4月份,而3月份工单余额表中没有记录。公司将上一个新的库存组织,有一部分测试的工单创建日期在4月份,而工单的发放日期、发料事务处理日期和完工事务处理日期均在3月份。1、关闭3月份库存会计期,待定事务处理存在未计成本物料/WMS。成本类型: PAC成本。

陈显平的专栏-Oracle EBS 651

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

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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: qt sdk 1.2 无法编译Demo
下一篇: Ubuntu /boot 空间不足
fancyerII
博客等级 码龄23年 48粉丝 164原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值