使用Maven运行Solr

使用Maven运行Solr

Solr是一个开放源代码搜索服务器,它是使用Lucene Core的索引和搜索功能构建的,它可以用于使用几乎任何编程语言来实现可扩展的搜索引擎。

尽管Solr具有许多优点,但建立一个开发环境并不是其中之一。 该博客文章描述了如何使用Maven运行Solr,并确保每个开发人员都使用相同的配置,架构和Solr版本。

我们的Maven构建的要求如下:

  • 我们的Maven构建的属性必须从外部属性文件中读取。 该规则的唯一例外是,依赖项的版本号在我们的POM文件中声明。
  • 启动我们的Solr实例时,构建过程必须将Solr配置文件复制到正确的目录。
  • 当开发人员在命令提示符下执行mvn clean命令时,构建过程必须清除配置文件。
  • 必须能够通过使用Jetty Maven插件启动我们的Solr实例。

我们可以通过执行以下步骤来满足这些要求:

  1. 创建一个POM文件。
  2. 获取所需的依赖项。
  3. 获取Solr配置文件。
  4. 创建属性文件,其中包含在我们的Maven构建中使用的属性。
  5. 编辑solr.xml文件。
  6. 配置属性Maven插件。
  7. 配置复制Maven插件。
  8. 配置Jetty Maven插件。

下面将更详细地描述这些步骤。

创建POM文件

首先,我们必须为Web应用程序项目创建POM文件。 我们的POM文件的框架如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.petrikainulainen.maven</groupId><artifactId>running-solr-with-maven</artifactId><packaging>war</packaging><version>0.1</version><profiles><!-- Add profile configuration here --></profiles><dependencies><!-- Add dependencies here --></dependencies><build><finalName>solr</finalName><!-- Add filter configuration here --><!-- Add resources configuration here --><plugins><!-- Add plugin configuration here --></plugins></build>
</project>

获取所需的依赖关系

我们唯一需要的依赖是Solr 4.1.0(战争)。 换句话说,我们唯一要做的就是将以下依赖项声明添加到POM文件的依赖项部分:

<dependency><groupId>org.apache.solr</groupId><artifactId>solr</artifactId><version>4.1.0</version><type>war</type>
</dependency>

获取Solr配置文件

通过执行以下步骤,我们可以获取Solr配置文件:

  1. 下载Solr 4.1.0的二进制发行版 。
  2. 将下载的软件包解压缩到所需目录。
  3. 进入解压缩的Solr二进制发行版的根目录。
  4. 将以下文件从目录example / solr / collection1 / conf复制到目录src / main / configadmin-extra.html,admin-extra-menu.menu-bottom.html,admin-extra.menu-top.hml ,currency.xml,elevate.xml,mapping-FoldToASCII.txt,mapping-ISOLatin1Accent.txt,protwords.xml,schema.xml,solrconfig.xml,spellings.txt,stopwords.txt,同义词.txt和update-script.js
  5. 将从目录example / solr / collection1 / conf / lang找到的特定于语言的配置文件复制到目录src / main / config / lang中
  6. 将从目录example / solr / collection1 / conf / velocity目录中找到的Velocity宏和其他文件复制到目录src / main / config / velocity中
  7. 将从目录example / solr / collection1 / conf / xslt中找到的XSL样式表复制到目录src / main / config / xslt中
  8. solr.xml文件从目录exaple / solr / collection1复制到目录src / main / resources
  9. 创建目录src / main / webapp / WEB-INF 。 此目录是必需的,以便可以启动Solr实例。

现在,我们已经成功获取了所需的文件,并准备进行下一个阶段。

创建属性文件

接下来是创建在Maven构建中使用的属性文件,并将所需的构建配置文件配置添加到我们的POM文件中。 让我们继续前进,找出实现方法。

首先,我们创建了在Maven构建中使用的属性文件。 我们可以按照以下步骤进行操作:

  1. 将目录profile / dev创建到我们的Maven项目的根目录。
  2. profiles / dev目录中创建一个属性文件config.properties

我们的属性文件具有以下三个属性:

  • solr.detault.core.directory属性指定默认核心目录的值。 这是在我们的Solr实例的主目录下创建的目录。 该目录存储我们的Solr实例及其数据的配置。
  • solr.default.core.name属性指定默认核心的名称。
  • solr.solr.home属性指出我们的Solr安装目录的主目录。

config.properties文件的内容如下所示:

#SOLR PROPERTIES
#Configures the directory used to store the data and configuration of the Solr default core
solr.default.core.directory=todo
#Configures the name of the Solr default core.
solr.default.core.name=todo#SYSTEM PROPERTIES
#Configures the home directory of Solr. Set the preferred directory path here.
solr.solr.home=

其次,我们必须配置Maven构建的构建配置文件,并使用过滤来替换替换资源中包含的变量。 我们可以按照以下步骤进行操作:

  1. 创建一个名为dev的配置文件,并确保它是我们构建的默认配置文件。
  2. 声明一个名为build.profile.id的属性,并将其值设置为'dev'。
  3. 创建一个过滤器,该过滤器读取特定于配置文件的配置文件,并将从我们的资源中找到的变量替换为实际的属性值。

通过将以下配置文件声明添加到我们的POM文件中,我们可以完成步骤1和步骤2:

<profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><build.profile.id>dev</build.profile.id></properties>
</profile>

我们可以通过将以下XML添加到POM文件的build部分来完成第三步:

<filters><filter>${project.basedir}/profiles/${build.profile.id}/config.properties</filter>
</filters>
<resources><resource><filtering>true</filtering><directory>src/main/resources</directory></resource>
</resources>

编辑solr.xml文件

因为我们使用特定于配置文件的配置文件来配置Solr默认核心的名称和实例目录,所以我们必须对solr.xml文件进行更改。 这些更改描述如下:

  1. 必须将solr.default.core.name属性的值设置为cores元素的defaultCoreNameAttribute属性的值。
  2. 必须将solr.default.core.name属性的值设置为核心元素的name属性的值。
  3. 必须将solr.default.core.directory属性的值设置为核心元素的instanceDir属性的值。

solr.xml文件的内容如下所示:

<solr persistent="true"><cores adminPath="/admin/cores" defaultCoreName="${solr.default.core.name}" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}"><core name="${solr.default.core.name}" instanceDir="${solr.default.core.directory}" /></cores>
</solr>

配置属性Maven插件

因为我们希望从外部属性文件中读取POM文件中使用的所有属性值,所以我们必须使用名为Properties Maven plugin的插件 。 我们可以按照以下步骤配置此插件:

  1. 确保从配置文件特定的配置文件中读取属性。
  2. 创建一个执行,该执行在Maven默认生命周期的初始化阶段中运行Properties Maven插件的read-project-properties目标。
  3. 创建一个执行,该执行在Maven清理生命周期的预清理阶段中运行Properties Maven插件的读取项目属性目标。

Properties Maven插件的配置如下所示:

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><configuration><files><!-- Properties are read from profile specific property file --><file>${project.basedir}/profiles/${build.profile.id}/config.properties</file></files></configuration><executions><!-- Load properties for the default lifecycle --><execution><id>default-lifecycle-properties</id><phase>initialize</phase><goals><goal>read-project-properties</goal></goals></execution><!-- Load properties for the clean lifecycle --><execution><id>clean-lifecycle-properties</id><phase>pre-clean</phase><goals><goal>read-project-properties</goal></goals></execution></executions>
</plugin>

配置复制Maven插件

我们将使用Copy Maven插件有两个目的:

  1. 启动Solr实例时,我们会将Solr配置文件复制到正确的目录中。
  2. 在命令提示符处执行命令mvn clean时,我们将删除Solr配置文件。

我们可以通过将以下XML添加到POM文件的插件部分来开始使用:

<plugin><groupId>com.github.goldin</groupId><artifactId>copy-maven-plugin</artifactId><version>0.2.5</version><executions><!-- Add executions here --></executions>
</plugin>

让我们继续前进,了解如何配置Copy Maven插件以复制和删除Solr配置文件。

复制Solr配置文件

我们可以按照以下步骤复制Solr配置文件:

  1. 创建一个执行,该执行在Maven默认生命周期的编译阶段中运行Copy Maven插件的复制目标。
  2. solr.xml文件复制到我们的Solr实例的主目录。 复制文件时,请确保将属性过滤应用于文件。
  3. 将从src / main / config目录找到的文件复制到solr.solr.home / solr.default.core.directory / conf目录。
  4. 将从src / main / config / lang目录中找到的特定于语言的配置文件复制到solr.solr.home / solr.detault.core.directory / conf / lang目录中。
  5. src / main / config / velocity目录中找到的Velocity宏和其他文件复制到solr.solr.home / solr.detault.core.directory / conf / velocity目录。
  6. 将从src / main / config / xslt目录中找到的XSL样式表复制到solr.solr.home / solr.detault.core.directory / conf / xslt目录中。

我们执行的配置如下所示:

<execution><id>copy-solr-config</id><phase>compile</phase><goals><goal>copy</goal></goals><configuration><resources><!--Copy solr.xml to correct directory and applies propertiesfiltering to it.--><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering><targetPath>${solr.solr.home}</targetPath><includes><include>solr.xml</include></includes></resource><!-- Copy configuration files --><resource><directory>${project.basedir}/src/main/config</directory><targetPath>${solr.solr.home}/${solr.default.core.directory}/conf</targetPath><excludes><exclude>lang</exclude><exclude>velocity</exclude><exclude>xslt</exclude></excludes></resource><!-- Copy language specific configuration files --><resource><directory>${project.basedir}/src/main/config/lang</directory><targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/lang</targetPath></resource><!-- Copy Velocity macros and other files --><resource><directory>${project.basedir}/src/main/config/velocity</directory><targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/velocity</targetPath></resource><!-- Copy XSL style sheets --><resource><directory>${project.basedir}/src/main/config/xslt</directory><targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/xslt</targetPath></resource></resources></configuration>
</execution>

删除Solr配置文件

我们可以按照以下步骤删除Solr配置文件:

  1. 创建一个执行,该执行在干净的生命周期阶段运行Copy Maven插件的复制目标。
  2. 如果找不到目录,请确保构建不会失败。
  3. 删除在我们的Maven项目的根目录中创建的overlays目录。
  4. 删除从我们的Solr实例的主目录中找到的solr.xml文件。
  5. 删除从solr.solr.home / solr.default.core.directory目录中找到的conf目录。

我们执行的配置如下所示:

<execution><id>clean-solr</id><phase>clean</phase><goals><goal>copy</goal></goals><configuration><failIfNotFound>false</failIfNotFound><resources><!-- Clean the overlays directory from the project root directory --><resource><clean>true</clean><cleanEmptyDirectories>true</cleanEmptyDirectories><directory>${project.basedir}/overlays</directory><includes><include>**/**</include></includes></resource><!-- Remove the solr.xml file --><resource><clean>true</clean><directory>${solr.solr.home}</directory><includes><include>solr.xml</include></includes></resource><!-- Remove the conf directory --><resource><clean>true</clean><cleanEmptyDirectories>true</cleanEmptyDirectories><directory>${solr.solr.home}/${solr.default.core.directory}</directory><includes><include>conf</include></includes></resource></resources></configuration>
</execution>

配置Jetty Maven插件

我们可以按照以下步骤配置Jetty Maven插件以运行Solr实例:

  1. 配置Jetty侦听端口8983。
  2. 确保从配置文件特定的配置文件中读取系统属性。 该属性文件包含一个名为solr.solr.home的属性,该属性指定我们的Solr实例的主目录。
  3. 指定我们应用程序的上下文路径为/ solr

Jetty Maven插件的配置如下所示:

<plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><version>8.1.8.v20121106</version><configuration><stopPort>9966</stopPort><stopKey>stop</stopKey><connectors><!-- Listen to port 8983 --><connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"><port>8983</port><maxIdleTime>60000</maxIdleTime></connector></connectors><!-- Read system properties from profile specific configuration file --><systemPropertiesFile>${project.basedir}/profiles/${build.profile.id}/config.properties</systemPropertiesFile><webApp><contextPath>/solr</contextPath></webApp></configuration>
</plugin>

运行Solr

现在,我们已经创建了一个Maven构建,该构建可用于在开发环境中运行Solr。 启动Solr实例有两种选择:

  • 我们可以在命令提示符下执行mvn jetty:run命令。
  • 我们可以在命令提示符下执行mvn jetty:run-war命令。

启动Solr之后,我们可以使用以下URL地址访问其管理界面: http:// localhost:8983 / solr

Github提供了示例应用程序 。 本示例使用自定义架构,因为我计划在Spring Data Solr教程中使用它。 原始示例架构可从etc目录中找到。

参考:来自Petri Kainulainen博客的JCG合作伙伴 Petri Kainulainen 与Maven一起运行Solr 。

翻译自: https://www.javacodegeeks.com/2013/05/running-solr-with-maven.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle11g日志原理,oracle11gRAC之log日志体系

oracle11gRAC之log日志体系&#xff1a;1、CRS日志(grid)&#xff1a;首选查看alertlog&#xff1a;$CRS_HOME/grid/log/hostname/alertdbserver1.logClusterware后台进程日志&#xff1a;crsd.Log: $ORA_CRS_HOME/grid/log/hostname/crsd/crsd.Logocssd.Log: $ORA_CRS_HOME/gr…

Eclipse中 如何实现 多行同时编辑

在编辑的时候按下 SHIFT ALT A 之后 鼠标变为 号 选择要同时编辑几行 即可编辑&#xff08;现在eclipse好像只能是编辑一块地方 不能像vs那样 任何地方可以同时编辑 这点很鸡肋&#xff09; 如图 退出编辑 再次 按 SHIFT ALT A 即可 转载于:https://www.cnblogs.com…

AFN\HTTPS\UIWebView

1.AFN使用技巧 1.在开发的时候可以创建一个工具类&#xff0c;继承自我们的AFN中的请求管理者&#xff0c;再控制器中真正发请求的代码使用自己封装的工具类。 2.这样做的优点是以后如果修改了底层依赖的框架&#xff0c;那么我们修改这个工具类就可以了&#xff0c;而不用再一…

检测和删除多余无用的css

本文主要讲解如何检测页面中多余无用的css。 1、chrome浏览器 F12审查元素的Audits 说明&#xff1a;使用Audits&#xff0c;会检测出页面中没有用到的css&#xff0c;需要手动删除多余的css&#xff1b;同时需要说明的是检测出多余无用的css块&#xff0c;而不是某一行css。 …

JDK 8的Calendar.Builder

勇敢的Java新世界的定义特征之一是Java空间中构建器模式的日益普及。 Groovy似乎是JVM上最流行的替代语言&#xff08;对于Java&#xff09;&#xff0c;以在核心库以及Groovy支持的库和框架中大量使用Builder而闻名。 乔希布洛赫与覆盖带来的图案为Java开发者社区心态前列模式…

oracle锁表会话超时时间,ORACLE快速彻底Kill掉的会话,防止锁表

ORACLE快速彻底Kill掉的会话,防止锁表2020-05-30编程之家收集整理的这篇文章主要介绍了ORACLE快速彻底Kill掉的会话,防止锁表&#xff0c;编程之家小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。万能是sql重启服务&#xff0c;不然&#xff0c;以下…

格式化文本

1.后台获取文本后文本内部存在回车&#xff0c;但是浏览器不能编译\n\t所以使用pre,使文本能够编译文本&#xff0c;2.若文本长度超出预设宽度&#xff0c;可以添加样式&#xff0c;下列代码&#xff0c;可以使超出后的文本自动换行。/*将文本解析为段落,是段落自动化行*/pre {…

webstorm快捷键

Ctrl/ 或 CtrlShift/ 注释&#xff08;// 或者/*…*/ &#xff09; ShiftF6 重构-重命名 CtrlX 删除行 CtrlD 复制行 CtrlG 查找行 CtrlShiftUp/Down 代码向上/下移动。 F2 或ShiftF2 高亮错误或警告快速定位 写代码&#xff0c;按Tab 生成代码 选中文本&#…

vue支付密码

从网上搜索了好多都很麻烦&#xff0c;花了点事件自己做了个&#xff0c;简单轻便&#xff0c;老少皆宜 <template> <section class"pay-mask" click"close_mask" v-show"payshow"> <div class"container"> <div…

打造智能建筑商

构建API时&#xff0c;您应该始终考虑谁将使用它。 当API简单易用时&#xff0c;用户就会感到满意。 当用户满意时&#xff0c;每个人也都会满意。 但是出色的可用性并非总是容易实现的。 有一些模式对此有所帮助&#xff0c;在这篇文章中&#xff0c;我将重点介绍经典的构建器…

结合BeautyEye开源UI框架实现的较美观的Java桌面程序

BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序&#xff0c;主要功能就是图灵机器人和一个2345网站万年历的抓取。。。。   挺简单而且实用的一个项目&#xff0c;实现出来的效果也还不错。希望可以学到知识的小可爱不对应该是帅哥&#xff0c;可…

oracle外表日期,三步教会您掌握oracle外表(external table)

三步教会你掌握oracle外表(external table)外表(externaltable)就像普通的表对像一样&#xff0c;可以select等&#xff0c;只是它是只读的&#xff0c;数据库中只保存了表结构的描述&#xff0c;表数据却没有存放在数据库内&#xff0c;而是存放在了文件系统上。当用户想偶尔使…

【从入门到放弃】23种设计模式(1):设计模式综述

一、设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式&#xff08;Factory Method&#xff09;、抽象工厂模式&#xff08;Abstract Factory&#xff09;、单例模式&#xff08;Singleton&#xff09;、建造者模式…

Bootstrap警告框

前面的话 在网站中&#xff0c;网页总是需要和用户一起做沟通与交流。特别是当用户操作上下文为用户提供一些有效的警示框&#xff0c;比如说告诉用户操作成功、操作错误、提示或者警告等。在Bootstrap框架有一个独立的组件&#xff0c;实现类似的效果&#xff0c;这个组件被称…

python doctest测试

title: Python doctest测试 tags: Python --- doctest测试 python 提供了REPL&#xff08;read-eval-print loop&#xff0c;读取、求值、输出的循环&#xff09; 官方地址&#xff1a;https://docs.python.org/3/library/doctest.html """ This is the "e…

异步CDI事件

几天前&#xff0c;在我们的常规代码审查中&#xff0c;我的一位同事提出了一个问题&#xff0c;即如果可能&#xff0c;一次同时调用CDI观察者&#xff08;这样的方法带有参数Observes的方法&#xff09;会发生什么&#xff1f;用于不同的事件实例。 换句话说&#xff0c;在产…

oracle改了包怎么保存,Oracle存储过程、包、方法使用总结(推荐)

/***author&#xff1a;zhengwei*date:2017-04-28*desc:存储过程用法总结*/CREATE OR REPLACE PROCEDURE MYPROCEDURE(P_ID IN VARCHAR,P_STATUS OUT VARCHAR) --P_ID为输入参数 ,P_STATUS为输出参数AS---变量声明T_STATUS VARCHAR2(20);T_ID NUMBER;V_POSTYPE VARCHAR2(20);V_…

【2017级面向对象程序设计】第2次成绩排行

作业地址 https://edu.cnblogs.com/campus/fzu/OOP/homework/1864 评分标准 1&#xff09; C 流程图 or 文字描述程序结构 5分C 类图 or 文字描述程序结构 5分2&#xff09; 代码 共 10 分构造函数 &#xff1a;2 分析构函数 &#xff1a;2 分成员函数 显示当前所处楼层&#x…

css定位position

闲言碎语不多说&#xff0c;直接开写&#xff01; 关于定位 我们可以使用css的position属性来设置元素定位类型&#xff0c;position的设置项如下&#xff1a; a、relative生成相对定位元素&#xff0c;元素所占据的文档流的位置不变&#xff08;即元素不会脱离文档流&#x…

Spring Security登录

1.简介 本文将重点介绍使用Spring Security登录 。 我们将在前面的简单Spring MVC示例的基础上构建&#xff0c;因为这是设置Web应用程序和登录机制的必要部分。 2. Maven依赖 要将Maven依赖项添加到项目中&#xff0c;请参阅Spring Security with Maven文章 。 标准的spring-…