`
brandNewUser
  • 浏览: 456897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

本地通过源码方式启动solr

阅读更多
 
 
解压完成后,分为几个目录,然而solr是通过ant编译的,我们想将其转换为maven方式,发现其中存在dev-tools/maven中,其中对应的说明:
 
Copy the Maven POM templates from under dev-tools/maven/ to the
      maven-build/ directory using the following command from the top-level
      directory:

         ant get-maven-poms

      Note that you will need to do this whenever changes to the POM
      templates are committed.  For this reason, it's a good idea run
      "ant get-maven-poms" after you update from origin.
 
 
在源代码的顶级目录中执行:
 
ant get-maven-poms,提示会查找ivy,没有安装,于是从ivy的官网下载。ivy属于ant的一个插件,需要将jar包copy到ant安装目录下的lib中,此时执行该命令后,就可以执行build。关于ivy的介绍,可以参考:http://www.cnblogs.com/ungshow/archive/2009/07/08/1519111.html
 
 
ant get-maven-poms
Buildfile: /Users/mazhiqiang/develop/study/solr-5.5.0/build.xml

resolve:

resolve:

ivy-availability-check:

ivy-fail:

ivy-configure:
[ivy:configure] :: Apache Ivy 2.4.0 - 20141213170938 :: http://ant.apache.org/ivy/ ::
[ivy:configure] :: loading settings :: file = /Users/xxx/develop/study/solr-5.5.0/lucene/ivy-settings.xml

resolve:
[ivy:retrieve] downloading https://repo1.maven.org/maven2/junit/junit/4.10/junit-4.10.jar ...
[ivy:retrieve] ................. (247kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] junit#junit;4.10!junit.jar (3616ms)
[ivy:retrieve] downloading https://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.3.2/randomizedtesting-runner-2.3.2.jar ...
[ivy:retrieve] ................ (232kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] com.carrotsearch.randomizedtesting#randomizedtesting-runner;2.3.2!randomizedtesting-runner.jar (2142ms)

ivy-availability-check:
….


-append-module-dependencies-properties:
     [echo] Get maven dependencies called under: /Users/mazhiqiang/develop/study/solr-5.5.0/lucene/..

-get-maven-poms:
     [copy] Copying 57 files to /Users/mazhiqiang/develop/study/solr-5.5.0/maven-build

BUILD SUCCESSFUL
Total time: 20 minutes 13 seconds
 
 
经过几次失败后,折腾一个小时,终于成功。ivy也比较类似maven,但是使用的仓库在用户目录/.ivy/下。
 
生成的pom文件按照工程的目录,已经放到了maven-build目录下,直接将其copy至顶层目录,本人的环境配置中使用的solr版本为5.5.0,但是发现生成的pom.xml用idea导入后问题非常多,不能直接启动。
 
 
 
不管用什么IDE首选都要设置Solr Home在IDE的JVM参数设置VM arguments写入 -Dsolr.solr.home=solr/example/solr一般就行了.不行也可以使用绝对路径.
 
solr使用StartSolrJetty文件作为入口文件进行调试代码,在这里可以设置服务器使用的端口和solr的webapps目录.一般都不用设置,默认的就可以进行调试.Solr Home也能可在代码中设置一样好用.  System.setProperty("solr.solr.home", "E:\\Work\\solr-4.2.0-src-idea\\solr\\example\\solr");
 
目前是使用自带的一个example作为solr配置的根目录,如果你有其他的solr配置目录,设置之即可。点击run即可,debug也是一样可以用了。没有别的问题就应该能运行了.注意servlet 容器使用的端口,如查提示:
 
FAILED SocketConnector@0.0.0.0:8983: java.net.BindException: Address already in use: JVM_Bind 就说明当前端口占用中.改一下就可以了.如果没有报错启动成功后就可以在浏览器中输入地址: http://localhost:8983/solr/ 就可以看到如下界面
 


 
 
 
 
从github上fork一个lucene-solr的项目:https://github.com/clamaa/lucene-solr,这个版本是6的,所以跟之前用到的有些jar包可能不太兼容(一些Deprecated的类已经被删除)。
 

使用idea启动

 
下载solr源码后,如果使用idea IDE作为启动容器,现在根目录下执行 ant idea,再启动StartSolrJetty.main函数即可。
 
resolve:

idea:
     [copy] Copying 81 files to /Users/xxx/develop/workspace/github/lucene-solr

-post-idea-instructions:
     [echo]
     [echo] To complete IntelliJ IDEA setup, you must manually configure
     [echo] File | Project Structure | Project | Project SDK.
     [echo]
     [echo] You won't have to do this in the future if you define property
     [echo] ${idea.jdk}, e.g. in ~/lucene.build.properties, ~/build.properties
     [echo] or lucene/build.properties, with a value consisting of the
     [echo] following two XML attributes/values (adjust values according to
     [echo] JDKs you have defined locally - see
     [echo] File | Project Structure | Platform Settings | SDKs):
     [echo]
     [echo]     idea.jdk = project-jdk-name="1.8" project-jdk-type="JavaSDK"
     [echo]

BUILD SUCCESSFUL
Total time: 3 minutes 9 seconds
 
用idea导入项目后,可以直接查看所有的java类以及配置文件信息。
 
修改SolrDispatchFilter, 理论上是需要读取当前ServletContext上下文中的solr.solr.home属性,我们这里将其直接修改为一个本地绝对路径,以便能够直接启动:
 
//      String solrHome = (String) config.getServletContext().getAttribute(SOLRHOME_ATTRIBUTE);
      String solrHome = "/Users/xxx/develop/workspace/github/lucene-solr/solr/server/solr";
 
 
org.apache.solr.client.solrj.StartSolrJetty作为启动类,需要修改一下    bb.setWar("solr/webapp/web”)。
 
 
打印出如下信息后,启动成功:
 
objc[5820]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.
Connected to the target VM, address: '127.0.0.1:61273', transport: 'socket'
0    INFO  (main) [    ] o.e.j.u.log Logging initialized @975ms
292  INFO  (main) [    ] o.e.j.s.Server jetty-9.3.8.v20160314
>>> STARTING EMBEDDED JETTY SERVER, PRESS ANY KEY TO STOP
633  INFO  (main) [    ] o.e.j.w.StandardDescriptorProcessor NO JSP Support for /solr, did not find org.eclipse.jetty.jsp.JettyJspServlet
697  INFO  (main) [    ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init(): sun.misc.Launcher$AppClassLoader@58644d46
773  INFO  (main) [    ] o.a.s.c.SolrResourceLoader new SolrResourceLoader for directory: '/Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr'
9565 INFO  (main) [    ] o.a.s.c.SolrResourceLoader JNDI not configured for solr (NoInitialContextEx)
9565 INFO  (main) [    ] o.a.s.c.SolrResourceLoader solr home defaulted to 'solr/' (could not find system property or JNDI)
9582 INFO  (main) [    ] o.a.s.c.SolrXmlConfig Loading container configuration from /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/solr.xml
9785 INFO  (main) [    ] o.a.s.c.CorePropertiesLocator Config-defined core root directory: /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr
9853 INFO  (main) [    ] o.a.s.c.CoreContainer New CoreContainer 313239742
9853 INFO  (main) [    ] o.a.s.c.CoreContainer Loading cores into CoreContainer [instanceDir=/Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr]
9855 WARN  (main) [    ] o.a.s.c.CoreContainer Couldn't add files from /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/lib to classpath: /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr/lib
9893 INFO  (main) [    ] o.a.s.h.c.HttpShardHandlerFactory created with socketTimeout : 600000,connTimeout : 60000,maxConnectionsPerHost : 20,maxConnections : 10000,corePoolSize : 0,maximumPoolSize : 2147483647,maxThreadIdleTime : 5,sizeOfQueue : -1,fairnessPolicy : false,
10404 INFO  (main) [    ] o.a.s.u.UpdateShardHandler Creating UpdateShardHandler HTTP client with params: 
10408 INFO  (main) [    ] o.a.s.l.LogWatcher SLF4J impl is org.slf4j.impl.Log4jLoggerFactory
10409 INFO  (main) [    ] o.a.s.l.LogWatcher Registering Log Listener [Log4j (org.slf4j.impl.Log4jLoggerFactory)]
10415 INFO  (main) [    ] o.a.s.c.CoreContainer Security conf doesn't exist. Skipping setup for authorization module.
10416 INFO  (main) [    ] o.a.s.c.CoreContainer No authentication plugin used.
10615 INFO  (main) [    ] o.a.s.c.CorePropertiesLocator Looking for core definitions underneath /Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/server/solr
10658 INFO  (main) [    ] o.a.s.c.CorePropertiesLocator Found 0 core definitions
10746 INFO  (main) [    ] o.a.s.s.SolrDispatchFilter user.dir=/Users/mazhiqiang/develop/workspace/github/lucene-solr
10746 INFO  (main) [    ] o.a.s.s.SolrDispatchFilter SolrDispatchFilter.init() done
10772 INFO  (main) [    ] o.e.j.s.h.ContextHandler Started o.e.j.w.WebAppContext@2e6a5539{/solr,file:///Users/mazhiqiang/develop/workspace/github/lucene-solr/solr/webapp/web/,AVAILABLE}{solr/webapp/web}
10802 INFO  (main) [    ] o.e.j.s.ServerConnector Started ServerConnector@6436a7db{HTTP/1.1,[http/1.1]}{0.0.0.0:8983}
10802 INFO  (main) [    ] o.e.j.s.Server Started @11904ms
 
 
 
如果我们之前启动的项目需要用到mmseg4j分词器,需要将这些jar包同样加入我们的classpath中,否则会爆出下面的错误:
 
Caused by: java.lang.ClassNotFoundException: com.chenlb.mmseg4j.solr.MMSegTokenizerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:340)
    at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:520)
 
 
将必要的jar包放到idea的classpath中之后,启动就不会出现问题,可以正常通过web端( http://localhost:8983/solr)来启动solr服务并调试了。 
 
Solr的启动过程主要包括:
 
1. 获取SolrHome:分别先后通过JNDI,System property,default directory三种方式尝试获取
2. 实例化启动过程中使用的类加载器SolrResourceLoader
3. 加载solrhome下的solr.xml文件,封装为ConfigSolr
4. 实例化一个CoreContainer,通过CoreContainer来加载cores
5. 遍历SolrHome,当寻找到含有core.properties的文件夹,则作为一个core
6. 多线程加载cores
7. 加载每个core时先加载solrconfig.xml封装为SolrConfig
8. 再加载schema.xml封装为IndexSchema
9. 最后实例化SolrCore

 

 
  • 大小: 90.7 KB
分享到:
评论

相关推荐

    Solr项目源码及solr资源包

    Solr项目源码及solr资源包是一个针对搜索...通过深入研究和实践这个“Solr项目源码及solr资源包”,开发者不仅可以掌握Solr的基本用法,还能了解Spring Data Solr的高级特性,从而提升在实际项目中的搜索引擎开发能力。

    solr5.4开发环境完整配置

    启动成功后,你可以通过浏览器访问 `http://localhost:8983/solr/` 来查看 Solr 的管理界面。 接下来是创建一个核心(core),这是 Solr 进行数据处理的基本单元。在 Solr 管理界面,选择 "Create" 操作创建一个新...

    solr-5.3.2

    解压后,用户可以根据需要配置Solr,启动服务器,然后通过HTTP接口添加、查询和管理索引。对于开发者来说,这是一个学习和部署Solr的好起点,特别是对于初次接触Solr或者需要在Windows平台上运行Solr的用户,32位和...

    Solr3.5开发应用指导

    - **4.5.4 EmbeddedSolrServer**:适用于本地测试,不需要启动单独的Solr服务器。 #### 五、Solr的实际应用测试报告 - **5.1 线下压力测试报告** - **5.2 线上环境运行报告** #### 六、solr性能调优 - **6.1 ...

    利用Solr搭建你的搜索引擎

    3. **启动Solr服务器**:运行Solr提供的`start.jar`或者通过命令行工具启动Solr服务器,这将启动一个默认的Solr实例。 4. **创建核心(Core)**:Solr的核心是处理特定数据集的基本单位。你可以根据需求创建多个...

    solr7.5官方文档

    通过这些示例,可以直观地看到 Solr 在不同环境下(如本地测试、开发、生产等)的配置方式,确保系统稳定运行。 #### 目录路径 在文档中明确指出了一些重要的目录路径,这些路径对于正确配置 Solr 非常关键。例如...

    开源bbs源码java-solr:索尔

    开源 bbs 源码 java 安装好ik分词器与拼音分词器的solr ...为clone下来保存在本地的 solr_home 启动tomcat 注意:使用高亮就不要开拼音检索,使用拼音就不要开高亮 案例 源码地址: 索引,查询工具: 相关资料

    solr-5.5.2-src.tgz

    例如,可以使用Ant或Maven构建Solr,然后配置Solr服务器并启动。 五、优化与调优 源代码对于性能调优也非常重要,开发者可以查看索引构建、查询执行、内存管理等方面的代码,找到可能的瓶颈并进行优化。 总结,...

    Solr In Action 英文完整版

    接着,读者将了解到Solr的安装过程,包括如何下载、解压和启动Solr服务器。然后,通过向Solr服务器发送HTTP请求,我们可以进行索引数据和执行搜索查询。 在Solr中,数据是以文档的形式存在。文档通常包含多个字段,...

    solr4.3源代码二

    4. **BUILD.txt**:提供了构建Solr 4.3的详细指南,包括编译环境设置、依赖库安装和构建过程等,对于开发者本地构建和调试源码至关重要。 5. **JRE_VERSION_MIGRATION.txt**:可能涉及Java运行环境版本的迁移指南,...

    开源中国源码

    - 增加定时任务管理,通过后台设置启动、关闭,执行任务日志 #### 二次开发准备 1. 开发环境要在IDE里装上lombok插件,否则编译器会报错 2. 程序部署建议使用Maven的assembly插件实现自定义打包方式 3. 项目已经接...

    java8源码-article:sgk

    java8 源码 实战社工库搭建 solr架构 python开发查询页面 0x前言 之前就在坛子里和大家交流了下搭建裤子的问题,本来还以为...solr开机自启动(方便做增量更新) 按照上面那个教程 成功从mysql导入到solr中 然后solr有w

    Java项目实战-搜索引擎的设计与实现(附源码,部署说明).zip

    "部署说明.txt"是项目运行的关键,它指导用户如何在本地环境上配置和启动搜索引擎。部署步骤可能包括安装必要的依赖库,配置数据库连接,设置服务器参数等。遵循这份说明,开发者可以快速地将项目运行起来,进行测试...

    朋也社区 v5.1.0

    朋也社区是用Java语言编写的社区(论坛)系统...docker-compose,然后一条命令就启动了2、下载release包启动,启动脚本都在压缩包里,你只需要运行它就可以了3、下载源码,通过maven编译启动,不推荐(除非你也是码农)

    单点登录源码

    - 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 - 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统...

    Nutch 安装ppt

    2. **启动 Solr**:按照官方文档启动 Solr 服务。 3. **配置 Nutch**:在 Nutch 的配置文件中添加 Solr 的连接信息。 4. **测试**:运行 Nutch 的爬虫功能,查看是否能够将抓取的数据成功推送到 Solr 中进行索引。 ...

    蘑菇博客(MoguBlog),一个基于微服务架构的前后端分离博客系统

    后端使用Spring cloud + Spring boot + mybatis-plus进行开发,使用 Jwt + Spring Security做登录验证和权限校验,使用ElasticSearch和Solr作为全文检索服务,使用Github Actions完成博客的持续集成,使用ELK收集...

    java版商城源码下载-eshop:基于SpringBoot+Dubbo微服务商城系统

    java版商城源码下载 基于SpringBoot+Docker+Dubbo 微服务商城 本项目是我的毕设项目,可以用来练练手 I. 导入工程 克隆代码仓库 git clone https://github.com/gulihua10010/eshop IDEA导入工程 打开IDEA,选择导入...

    搭建nutch开发环境步骤

    最后,启动Solr或Elasticsearch服务,然后使用它们提供的搜索接口测试Nutch的搜索功能。 以上就是搭建Nutch开发环境的详细步骤。在实际操作过程中,可能会遇到各种问题,如依赖冲突、配置错误等,这时可以查阅官方...

    zookeeper 集群搭建1

    Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。 ...

Global site tag (gtag.js) - Google Analytics