solr 6.1 服务端 tomcat 搭建及调用
一、下载
apache solr6.1.0 最新版本zip,解压缩生成一个solr6.1.0文件夹
二、安装
1、在d:/projects下新建一个solr
2、把solr6.1.0/server/solr复制到d:/projects/solr/下,并把文件夹改为home,即d:/projects/solr/home.
3、复制一个tomcat文件夹在d:/projects/下,并改名为:d:/projects/server
4、把solr-6.1.0\server\solr-webapp\webapp复制到D:\projects\solr\server\webapps下,并改名为
solr,即为: D:\projects\solr\server\webapps\solr
5、修改tomcat配置文件,D:\projects\solr\server\conf\server.xml:
在<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">下添加:
<Context path="" docBase="solr" reloadable="false" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="D:\projects\solr\home" override="true"/>
</Context>
这里的docBase=”solr”,对应D:\projects\solr\server\webapps\solr 这里的文件夹中的solr;
value=””上面第2条中的地址。
6、把solr-6.1.0.0\server\lib\ext中的所有jar包得制到tomcat\lib下(即D:\projects\solr\server\lib\)。
7、启动tomcat--------------------------
8、浏览器中输入地址:http://localhost:8080/index.html
三、配置
core配置
1、 把D:\projects\solr\home\configsets\basic_configs文件夹复制到D:\projects\solr\home\下,并改名为core1,即D:\projects\solr\home\core1
2、 在浏览器中,选择core admin,点击add core,输入一下下内容,instanceDir一定要写为上面一步中修改后的文件夹名。
solrconfig.xml 和 managed-schema 两个文件在 D:\projects\solr\home\core1\conf 中
solr管理界面登录权限配置(
注:
权限配置 最好先别配置 等 测试代码连接到 solr 并成功返回后 再尝试配置
)
1、修改tomcat的tomcat-user.xml ,</tomcat-user>上面添加:
<role rolename="solr"/>
<user username="admin" password="admin" roles="solr"/>
3、 修改solr项目中的D:\projects\solr\server\webapps\solr\WEB-INF \web.xml, 在</web-app>上面添加:
<security-constraint>
<web-resource-collection>
<web-resource-name>Solr Lockdown</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>solr</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Solr</realm-name>
</login-config>
3、重新启动tomcat,再使用管理界面就必须要输入用户名/密码(admin/admin)了。
客户端访问权限控制
在D:\projects\solr\server\webapps下创建:communityserver_override.config,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<Overrides>
<Override xpath="/CommunityServer/Search/Solr" mode="change" name="host" value="http://localhost:8080" />
</Overrides>
value的值为浏览器中访问地址?待确认.
四、中文分词器
mmseg4j中文分词器
1、 从网上maven库下载最新版本: mmseg4j-core-1.10.0.jar; mmseg4j-solr-2.3.0.jar(中有这二个jar, mmseg4j-analysis-1.9.1.jar不能放,否则会报java.lang.NoSuchMethodError: com.chenlb.mmseg4j.analysis.MMSegTokenizer.<init>(Lcom/chenlb/mmseg4j/Seg;)V错误,因为mmseg4j-solr-2.3.0已经包含了mmseg4j-analysis)。放在D:\projects\solr\server\webapps\solr\WEB-INF\lib\下。
2、
配置schema.xml。
schema.xml的配置也挺简单,首先需要在schema.xml文件中配置一个fieldType节点,如下:
<!-- mmseg4j -->
<fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100">
<span style="white-space:pre"> </span><analyzer>
<span style="white-space:pre"> </span><tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" />
<span style="white-space:pre"> </span></analyzer>
</fieldType>
然后就可以在field节点中引用该filedType了,假设你有个字段叫keyWord需要支持中文分词,只需要定义示例filed节点如下:
<field name="keyWord" type="text_zh" indexed="true" stored="false" multiValued="true"/>
五、使用solrj操作solr
1、URL不可以带admin.html
2、SolrInputDocument中的字段,必须在core1/conf/managed-schema中有对应的field
3、必须先创建索引,查询才有数据
4、如果有走http协议(使用httpclient操作)有管理密码(web.xml中的配置),会报: This request requires HTTP authentication.
package com.test;
5、如果 出现 以下相关异常报错
servlet [default] in context with path [/solr] threw exception
org.apache.solr.common.SolrException: Error processing the request. CoreContainer is either not initialized or shutting down.
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:217)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)
解决方案:
可以在D:\projects\solr\server\webapps\solr目录中创建 lib目录然后将solr解压开的文件夹dist中jar包和contrib\velocity\lib
下的jar拷贝到该新创建的lib目录就可以了。(注:是把 dist目录和 contrib\velocity\lib 下的所有jar 包括子目录里的 jar 全部复制到 D:\projects\solr\server\webapps\solr\lib 中 lib中所有jar都是平级的 lib 下没有子目录)
以下java 代码进行连接 查询测试
需要引用 两个jar 文件 在项目的 pom 文件中 添加 如下代码:
<dependency>
<groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>6.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId><artifactId>solr-core</artifactId><version>6.1.0</version>
</dependency>
<!--可能还会需要下面这个 如果你的pom文件报了这个错的话 可能还会报 org.restlet-2.3.0.jar 这个文件找不到 下载一个到你的maven本地仓库 就可以了-->
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.6</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
注: 如果配置了 访问权限 下面在连接的时候 会报错
如果想要在有用户名密码的环境下连接使用 则以下代码在 连接的时候 需要添加 http的用户名密码 验证(具体添加方法 自行网络搜索 )
另:安全配置除了 添加用户名密码 外 还需要 绑定 允许访问的ip地址 为localhost 127.0.0.1 或者服务器 真实Ip地址 防止 被恶意攻击
绑定方法 自行 网络搜索
import org.apache.solr.client.solrj.*;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MySolr {
//solr url
public static final String URL = "http://localhost:8080/solr";
//solr应用
public static final String SERVER = "core1";
//待索引、查询字段 http://localhost:8080/solr53/#/connection1
public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",
"它对外提供类似于Web-service的API接口",
"用户可以通过http请求",
"向搜索引擎服务器提交一定格式的XML文件生成索引",
"也可以通过Http Get操作提出查找请求",
"并得到XML格式的返回结果"};
public static SolrClient getSolrClient(){
System.out.println(URL+"/"+SERVER);
return new HttpSolrClient(URL+"/"+SERVER);
}
/**
* 新建索引
* 就是 把数据放到 solr中 以便搜索查询 可以单独写一个方法 导入
*最好是 配置solr 连接数据库 自动导入相关数据到索引库(没有配置好 如果你有完整的配置 方法 欢迎留言)
*/
public static void createIndex(){
SolrClient client = getSolrClient();
int i = 0;
List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>();
for(String str : docs){
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id",i++);
doc.addField("content", str);//需要在core1/conf/managed-schema中有对应的field
docList.add(doc);
}
try {
client.add(docList);
client.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
/**
* 搜索
*/
public static void search(){
SolrClient client = getSolrClient();
SolrQuery query = new SolrQuery();
query.setQuery("content:搜索");
QueryResponse response = null;
try {
response = client.query(query);
System.out.println(response.toString());
System.out.println();
SolrDocumentList docs = response.getResults();
System.out.println("文档个数:" + docs.getNumFound());
System.out.println("查询时间:" + response.getQTime());
for (SolrDocument doc : docs) {
System.out.println("id: " + doc.getFieldValue("id") + " content: " + doc.getFieldValue("content"));
//配置分词后
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// createIndex();
search();
}
}
solr 6.1 服务端 tomcat 搭建及调用的更多相关文章
- spring-oauth-server实践:客户端和服务端环境搭建
客户端:http://localhost:8080/spring-oauth-client/index.jsp 服务端:http://localhost:8080/spring-oauth-serve ...
- Spring Cloud 服务端注册与客户端调用
Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...
- 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)
信鸽推送 .NET 服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...
- Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)
一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...
- Redis服务端的搭建(初级)
前方低能,仅适合入门级菜鸟阅读,大神大牛通通闪开! 前言:redis经常被用来做缓存(原因自行科普),基于学习的需要自己搭建了一个redis服务器,考虑到项目的分布式部署,所以前期开始的时候,redi ...
- Vue+koa2开发一款全栈小程序(5.服务端环境搭建和项目初始化)
1.微信公众平台小程序关联腾讯云 腾讯云的开发环境是给免费的一个后台,但是只能够用于开发,如果用于生产是需要花钱的,我们先用开发环境吧 1.用小程序开发邮箱账号登录微信公众平台 2.[设置]→[开发者 ...
- 服务端tomcat的简单监控
由于线上对tomcat监控处于失控的状态(只能通过跳转,简单地jstack/jstat进行监控),故需要针对tomcat快速查看其运行状态 Tomcat-manager 在tomcat/web ...
- Node服务端极速搭建 - nvmhome
本文意在让你掌握极速搭建Node服务端(任何Project) $ whoami name: kelvin email: kelvv@outlook.com homepage: www.kelvv.co ...
- Node服务端极速搭建 -- nvmhome
> 本文意在让你掌握极速搭建Node服务端(任何Project) ```$ whoaminame: kelvinemail: kelvv@outlook.comhomepage: www.kel ...
随机推荐
- rabbitMQ集群部署以及集群之间同步
MQ集群部署 期待的部署架构 其中,一个机房有两台机器部署MQ,并组成集群,有一个机房的MQ集群作为中心集群,其他机房的MQ集群将消息同步到中心MQ集群中. 安装erlang,略.. 安装rabbit ...
- 如何获取网页上的LOGO
一般公司网页上的图片都会禁止右键另存为,用截图工具接下来的图会带背景色,PS成背景透明有点费时间. 用Google Chrome 或Firefox 打开目标网页,右键点击审查元素,将鼠标放在图片上,一 ...
- Hosts简单说明
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统 ...
- Groovy学习笔记(二)
在上一篇文章中我们主要学习了如何搭建Groovy开发环境,为我们的Groovy之旅做好了准备工作,不知道你是否准备好了?接下来我们就一起看看Groovy与我们熟悉的Java有什么异同. Groovy是 ...
- HTML 5 Canvas 参考手册
HTML 5 Canvas 参考手册 HTML 视频/音频 HTML 文档类型 描述 HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript). 不过,&l ...
- List,Set,Map用法以及区别(转)
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素.一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java ...
- Java Spring DI之旅
做过.NET的人很多都用过Microsoft Enterprise Library,里面有一个Dependency injection工具Unity,我们可以使用它来实现依赖注入:什么是依赖注入呢?我 ...
- * 和 ** python
*代表tuple集合,**代表dict def func(a, b, c=0, *args, **kw) print ('a=',a, 'b=',b,'c=',c,'args=',args,'kw= ...
- :nth-child
匹配其父元素下的第N个子或奇偶元素 :eq(index) 匹配选择器指定序列的元素,而这个将为每一个父元素匹配子元素. :nth-child从1开始的,而:eq()是从0算起的!可以使用:<br ...
- Python—Socket
Socket模块 socket通常也称作"套接字",用于描述IP地址和端口,是特定网络协议如TCP/IP.UDP/IP套件对网络应用程序提供者提供的当前可移植标准的对象, 用来连接 ...