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万+

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南

本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。

weixin_29173777的博客 344

Unity 数字孪生笔记1 工具介绍

前言 工欲善其事必先利其器 流程思考 数字孪生本质上一种基于实际物理数据的可视化方案,通过对接实际数据,在三维界面中展示孪生结果。 那么这个流程就很简单了。 整个流程分为三块:数据来源-》数据分析-》数据展示 输入数据 首先我们需要考虑我们能拿到什么。第一,实际物体的三维数据从哪里来,第二,实际数据怎么获取到。 模型数据 工业上常常会用到CAD模型,CAD模型具有精确、统一的特点,但是CAD不是三角面片,我们不能直接导出到Unity中,而且导入之后有很多不合理的地方,例如面片杂乱、面数过高等问题。针对这个

Thissky的专栏 1万+

YOLO-World:从入门到实战的多模态目标检测全指南

想象一下,你给模型一张“公园”的图片,再输入文字“红色的郁金香”,它能直接在图中框出所有红色郁金香的位置——这就是多模态目标检测:结合图像视觉信息和文本语义信息,同时完成“是什么”(分类)和“在哪里”(定位)的任务。传统目标检测(如YOLOv5、YOLOv8)只能识别预定义的类别(比如训练时学过“猫”“狗”),但多模态目标检测摆脱了“类别预定义”的限制,只要文本能描述,它就能检测,这就是“开放词汇检测(Open-Vocabulary Detection)”的魅力。

know_F0727的博客 204

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

Robot_PLC_HMI_Automation 6534

前端使用二开Thingsboard一、二、三事(三)-规则链

以项目实战为基础,逐步介绍前端在thingsboard系统二次开发中的一些注意事项以及一些thingsboard一些页面功能讲解,为前端人员开发使用thingsboard提供一种可靠思路,打造一个完美的物联网系统。

weixin_43163457的博客 863

OpenHarmony RK3568 从 32 位切换到 64 位用户空间指南

修改了编译参数(如修复 Q5 后),但 ThinLTO 缓存中保留了旧参数编译的 bitcode。这是一种节省内存的设计(32 位指针占 4 字节 vs 64 位占 8 字节),但在某些场景下需要切换为纯 64 位。切换到 64 位用户空间后,CPU 全程运行在 AArch64 状态,不再需要 AArch32 兼容模式。内核本身已经是 64 位(aarch64),切换用户空间位数不影响内核。(32 位兼容层)在纯 64 位系统中不再需要,可以关闭以减小内核体积。这两个参数对 64 位编译毫无意义,配合。

程小二的博客 689

063、推挽变换器的磁偏问题与解决

本文针对推挽变换器中的磁偏问题展开分析。作者通过实际案例指出,磁偏主要由开关管导通压降差异和驱动信号不对称引起,会导致变压器饱和、MOS管炸毁等问题。文章提供了四种解决方案:采用电流模式控制、添加隔直电容、优化对称驱动设计以及引入磁芯气隙(作为最后手段)。调试时应重点观察原边电流波形对称性、变压器声音和直流分量。作者强调实践经验的重要性,建议预留隔直电容位置,并指出推挽拓扑在500W以上功率场合的局限性。这些基于实战的经验总结为电源工程师提供了有价值的参考。

Jack010169的博客 310

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 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、付费专栏及课程。

余额充值