Apache Solr 介绍Solr 是什么?
Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是必须的要求。
Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。
Lucene 是什么?
Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。
目前已经有很多应用程序的搜索功能是基于 Lucene ,比如 Eclipse 帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。
Solr VS Lucene
Solr 与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene ,因为Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene 。
安装搭建Solr安装 Java 虚拟机
Solr 必须运行在Java1.5 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可,但如果需要扩展功能或编译源码则需要下载JDK 来完成。可以通过下面的地址下载所需JDK 或JRE :
OpenJDK ( http://java.sun.com/j2se/downloads.html )Sun (http://java.sun.com/j2se/downloads.html )IBM (http://www.ibm.com/developerworks/java/jdk/ )Oracle (http://www.oracle.com/technology/products/jrockit/index.html )安装 步骤请参考相应的帮助文档。安装中间件
Solr 可以运行在任何Java 中间件中,下面将以开源Apache Tomcat 为例讲解Solr 的安装、配置与基本使用。本文使用Tomcat5.5 解压版进行演示,可在下面地址下载最新版本http://tomcat.apache.org/download-55.cgi
安装Apache Solr下载最新的Solr
本文发布时Solr1.4 为最新的版本,下文介绍内容均针对该版本,如与Solr 最新版本有出入请以官方网站内容为准。Solr官方网站下载地址:http://www.apache.org/dyn/closer.cgi/lucene/solr/
Solr 程序包 的目录结构
build :在solr 构建过程中放置已编译文件的目录。
client :包含了一些特定语言调用Solr 的API 客户端程序,目前只有Ruby 可供选择,Java 客户端叫SolrJ 在src/solrj 中可以找到。
dist :存放Solr 构建完成的JAR 文件、WAR 文件和Solr 依赖的JAR 文件。
example :是一个安装好的Jetty 中间件,其中包括一些样本数据和Solr 的配置信息。
example/etc :Jetty 的配置文件。
example/multicore :当安装Slor multicore 时,用来放置多个Solr 主目录。
example/solr :默认安装时一个Solr 的主目录。
example/webapps :Solr 的WAR 文件部署在这里。
src :Solr 相关源码。
src/java :Slor 的Java 源码。
src/scripts :一些在大型产品发布时一些有用的Unix bash shell 脚本。
src/solrj :Solr 的Java 客户端。
src/test :Solr 的测试源码和测试文件。
src/webapp :Solr web 管理界面。管理界面的Jsp 文件都放在web/admin/ 下面,可以根据你的需要修改这些文件。
Solr 的源码没有放在同一个目录下,src/java 存放大多数文件,src/common 是服务器端与客户端公用的代码,src/test 放置solr 的测试程序,serlvet 的代码放在src/webapp/src 中。
Solr 主目录结构
一个运行的Solr 服务其主目录包含了Solr 的配置文件和数据(Lucene 的索引文件)
Solr 的主目录展开后为如下结构:
bin :建议将集群复制脚本放在这个目录下。
conf :放置配置文件。
conf/schema.xml :建立索引的schema 包含了字段类型定义和其相关的分析器。
conf/solrconfig.xml :这个是Solr 主要的配置文件。
conf/xslt :包含了很多xslt 文件,这些文件能将Solr 的XML 的查询结果转换为特定的格式,比如:Atom/RSS。
data :放置Lucene 产生的索引数据。
lib :放置可选的JAR 文件比如对Slor 扩展的插件,这些JAR 文件将会在Solr 启动时加载。
如何 设置 主目录
通过Java system property ,属性的名称是:solr.solr.home 。
通过JNDI 将主目录的路径绑定到java:comp/env/solr/home 。
通过修改web.xml 位置在:src/web-app/web/WEB-INF ,
|
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>solr/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
|
如果Solr 主目录没有指定则默认设置为solr/
发布运行Solr
将apache-solr-1.4.0/dist/apache-solr-1.4.0.war 从安装包中解压到<tomcat home>/webapps 下。WAR 是一个完整的web 应用程序,包括了Solr 的Jar 文件和所有运行Solr 所依赖的Jar 文件,Jsp 和很多的配置文件与资源文件,这里需要注意的是:WAR 文件中不包括Solr 主目录,因此在启动tomcat 之前我们要先指定Solr 的主目录。
将安装程序中的apache-solr-1.4.0/example/solr 文件夹解压到<tomcat homt>/ 下,然后在<tomcat home>/bin/catalina.bat 第一行添加如下内容:
setJAVA_OPTS=%JAVA_OPTS% -Dsolr.solr.home=<tomcat home>/solr
注:Windows 以外操作系统需修改 catalina.sh 文件。
启动tomcat ,apache-solr-1.4.0.war 自动发布为web 应用。
点击链接访问Solr 控制台界面,http://localhost:8080/apache-solr-1.4.0/ ,显示如下界面表示启动成功。

图 1 Solr 欢迎界面

图 2 管理控制台界面
使用Java 接口访问Solr 服务
SolrJ 是Solr 服务器的一个Java 接口,使用该接口再也不同为虑客户端与服务器端交互时格式解析和转换的问题烦恼了,取而代之的是用你熟悉的对象来进行相关的操作,而且随着Solr 的不断升级SolrJ 也会同样提供这些新加入的功能。
SolrJ (Solr1.4 )依赖的Jar 包commons-codec-1.3.jarcommons-fileupload-1.2.1.jarcommons-httpclient-3.1.jarcommons-logging-1.0.4.jarcommons-io-1.4.jargeronimo-stax-api_1.0_spec-1.0.1.jarsolr-solrj-1.4.0.jarwstx-asl-3.2.7.jarstax-api-1.0.1.jarslf4j-api-1.5.5.jarslf4j-simple-1.5.5.jar创建 SolrServer
SolrJ 中有2 种SolrServer 对象,CommonsHttpSolrServer 与EmbeddedSolrServer ,他们都是线程安全的并建议使用单例模式来使用他们,因为动态创建会造成连接泄露。
Create CommonsHttpSolrServer
1 2 |
String url ="http://localhost:8983/solr"; SolrServer server =new CommonsHttpSolrServer( url );
|
Create EmbeddedSolrServer
1 2 3 4 5 |
// solr.solr.home 属性也可以通过 JVM 参数设置System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr"); CoreContainer.Initializer initializer =new CoreContainer.Initializer(); CoreContainer coreContainer = initializer.initialize(); EmbeddedSolrServer server =new EmbeddedSolrServer(coreContainer, "");
|
添加
|
public SolrServer getSolrServer(){// 对象实例可以重复使用returnnew CommonsHttpSolrServer();}
SolrServer server = getSolrServer();// 清空之前建立的索引数据 server.deleteByQuery("*:*");// 创建一个文档
SolrInputDocument doc1 =new SolrInputDocument();
doc1.addField("id", "id1", 1.0f );
doc1.addField("name", "doc1", 1.0f );
doc1.addField("price", 10);// 创建另外一个文档
SolrInputDocument doc2 =new SolrInputDocument();
doc2.addField("id", "id2", 1.0f );
doc2.addField("name", "doc2", 1.0f );
doc2.addField("price", 20);// 创建文档集合
Collection<SolrInputDocument> docs =new ArrayList<SolrInputDocument>();
docs.add( doc1 );
docs.add( doc2 );// 将文档添加到 Solr 中 server.add( docs );// 提交 server.commit();
|
查询
|
// 得到一个 SolrServer 实例(通过上面介绍的方法创建)
SolrServer server = getSolrServer();// 构造一个查询对象
SolrQuery query =new SolrQuery();
query.setQuery("*:*");
query.addSortField("price", SolrQuery.ORDER.asc);// 查询结果
SolrDocumentList docs = rsp.getResults();
|
中文分词分词产品
目前Lucene 的中文分词主要有:
paoding :Lucene 中文分词“庖丁解牛” Paoding Analysis 。imdict :imdict 智能词典所采用的智能中文分词程序。mmseg4j : 用 Chih-Hao Tsai 的 MMSeg 算法 实现的中文分词器。ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式。分词效率
下面是各个分词产品官方提供的数据:
paoding :在PIII 1G 内存个人机器上,1 秒 可准确分词 100 万 汉字。imdict :483.64 ( 字节/ 秒) ,259517( 汉字/ 秒) 。mmseg4j : complex 1200kb/s 左右, simple 1900kb/s 左右。ik :具有 50 万字 / 秒的高速处理能力。自定义词库paoding :支持不限制个数的用户自定义词库,纯文本格式,一行一词,使用后台线程检测词库的更新,自动编译更新过的词库到二进制版本,并加载imdict :暂时不支持用户自定义词库。但 原版 ICTCLAS 支持。支持用户自定义 stop wordsmmseg4j :自带 sogou 词库,支持名为 wordsxxx.dic , utf8 文本格式的用户自定义词库,一行一词。不支持自动检测。 -Dmmseg.dic.pathik : 支持 api 级的用户词库加载,和配置级的词库文件指定,无 BOM 的 UTF-8 编码, \r\n 分割。不支持自动检测。ik 与 solr 集成
以上产品中只有 ik 提供了 Solr ( 1.3 , 1.4 )的分词接口程序,只需修改配置文件即可实现中文分词,配置方法如下;
使用 IKAnalyzer 的配置
1 2 3 4 5 6 7 |
<schemaname="example"version="1.1"> …… <fieldTypename="text"class="solr.TextField"><analyzerclass="org.wltea.analyzer.lucene.IKAnalyzer"/></fieldType> …… </schema>
|
使用 IKTokenizerFactory 的配置
1 2 3 4 5 6 7 8 9 10 |
<fieldTypename="text"class="solr.TextField"><analyzertype="index"><tokenizerclass="org.wltea.analyzer.solr.IKTokenizerFactory"isMaxWordLength="false"/> …… </analyzer><analyzertype="query"><tokenizerclass="org.wltea.analyzer.solr.IKTokenizerFactory"isMaxWordLength="true"/> …… </analyzer></fieldType>
|
分享到:
相关推荐
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,Induction_Motor_VF_Control:基于MATLAB Simulink的利用V F控制的感应电机调速仿真模型。 仿真条件:MATLAB Simulink R2015b ,核心关键词:基于MATLAB Simulink;Induction Motor(感应电机);VF Control(V F控制);调速仿真模型;MATLAB Simulink R2015b。,基于MATLAB Simulink的VF控制感应电机调速仿真模型研究
自驾游中如何规划住宿地点
java-springboot+vue酒店管理系统源码(完整前后端+mysql+说明文档+LunW+PPT).zip
网络文化互动中的虚拟现实技术应用
自驾游中如何避免交通事故
内容概要:这份由世界银行发布的研究报告探讨了人工智能在金融监督中的潜力及其可能的影响和挑战。它详细介绍了目前监督机构所面临的难题,如资源有限、数据质量差和技术落后等。此外,文中强调了引入AI作为辅助手段来改进传统的风险管理模型的可能性,并提供了具体案例展示AI在全球范围内被用于提高监督效能的不同方式。然而,同时也指出了伴随而来的各类风险,包括但不限于透明度不足、公平性问题以及安全性漏洞等。 适合人群:金融监管部门决策者、研究学者和技术专家。 使用场景及目标:为金融监督管理部门提供关于利用人工智能进行风险管理监督的新视角和技术参考,帮助其评估是否采用AI技术并应对实施过程中可能出现的风险。 其他说明:虽然AI技术带来了许多好处,但也面临着来自内部和外部环境的各种障碍。报告建议监管机构应该逐步探索和适应新的变化,建立适当的治理框架来确保安全有效的应用,而不是立即全面推行AI系统。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1 MYSQL数据库 2 2.2 B/S结构 3 2.3 Spring Boot框架简介 4 3系统分析 4 3.1可行性分析 4 3.1.1技术可行性 4 3.1.2经济可行性 5 3.1.3操作可行性 5 3.2系统性能分析 5 3.2.1 系统安全性 5 3.2.2 数据完整性 6 3.3系统界面分析 6 3.4系统流程和逻辑 7 4系统概要设计 8 4.1概述 8 4.2系统结构 9 4.3.数据库设计 9 4.3.1数据库实体 9 4.3.2数据库设计表 11 5系统详细实现 13 5.1 学生信息管理 13 5.2 学生信息查询 13 5.3 学生信息修改 14 5.4 办理学生入学 14 5.5 学生学籍管理 15 5.6 入学办理管理 15 6系统测试 16 6.1概念和意义 16 6.2特性 16 6.3重要性 17 6.4测试方法 17 6.5 功能测试 17 6.6可用性测试 18 6.7性能测试 18 6.8测试分析 19 6.9测试结果分析 19 结论 19
电子技术设计--课程设计全套资料.zip
Principles of Economics 10th Edition by N. Gregory Mankiw, 2023
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
,,大型三菱plcQ系列 四个QD77简易运动模块,通信总线控制 48 轴,程序八万步,写法新颖,思路清晰 读性性和可移植性强,带远程I O 以态网通信,视觉通信,伺服参数设置 程序虽然复杂,但分块编写,注解非常详细,对提高编程思路有很大的帮助 ,大型三菱PLC; Q系列; 通信总线控制; 48轴; 程序分块编写; 注解详细; 远程IO; 以太网通信; 视觉通信; 伺服参数设置,三菱PLC Q系列:复杂程序分块编写,视觉通信与伺服参数设置指南
励志图书的成功案例分享、人生智慧提炼与自我提升策略
大数据的sql练习题,初级中级高级
,,PWM_Modulation_Inverter:基于MATLAB Simulink的三种不同PWM波调制下的逆变电路仿真模型,三种PWM调制方法分别为双极性PWM、单极性PWM和正弦PWM。 仿真条件:MATLAB Simulink R2015b ,核心关键词:PWM_Modulation_Inverter; MATLAB Simulink; 双极性PWM; 单极性PWM; 正弦PWM; 仿真模型; 条件; R2015b。,MATLAB Simulink中PWM调制逆变电路仿真模型研究:双极性、单极性与正弦PWM的比较
,,双馈风机惯性控制参与系统一次调频的Matlab Simulink模型 系统为两区四机模型,所有参数已调好且可调,可直接运行,风电渗透率14.8% 风机采用惯性控制,转速回复,在系统频率跌落时释放转子动能提供有功支撑,参与电网的一次调频 转子动能控制 转子动能控制双馈风机调频 两区四机系统风机并网MATLAB仿真模型 仿真图 惯性控制 下垂控制 课程设计 仿真对比 ,双馈风机; 虚拟惯性控制; 一次调频; MATLAB Simulink模型; 两区四机模型; 风电渗透率; 转子动能控制; 并网仿真; 仿真对比。,基于双馈风机虚拟惯性控制的系统一次调频仿真对比模型
,,c# mqtt高性能服务器端源代码。 你还在使用第三方服务软件吗?不如试试这个开发框架,助你一臂之力,无限制,无全开源,无版权约束,全是自主开发。 开源框架包括服务器和客户端,支持mqtt3.0及5.0。 可嵌入到自己的服务系统及软件客户端中,不受第三方约束。 你要问我稳定性如何?我能回答的是已经运行了三年有余无任何问题。 如果你要问能接入多少终端,我可以明确回答,不敢往多的说,单节点支持100万并发量无压力。 这是一个关于C# MQTT高性能服务器端源代码的描述。如果我重新表述一下,可以这样说:你是否还在使用第三方服务软件?为什么不尝试一下这个开发框架呢?它可以为你提供强大的支持,没有任何限制,完全开源,没有版权约束,全部都是自主开发的。 这个开源框架包括服务器和客户端,支持MQTT 3.0和5.0协议。你可以将它嵌入到自己的服务系统和软件客户端中,不受第三方的限制。 你可能会问它的稳定性如何。我可以很自信地告诉你,它已经运行了三年多,没有出现任何问题。 如果你想知道它可以接入多少终端,我可以明确地回答,单节点支持100万并发连接,毫不费力。 从这段话中,我们可以提取出以
Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企业资产管理系统源码+数据库(高分毕设)Java实现基于SSM的企
EmoLLM心理大模型数据集