Solr6.6的安装以及Java使用SolrJ调用Solr服务,springmvc使用solr,springboot使用solr
2017-07-24 10:09
567 查看
一,Solr环境安装
1、安装Jdk1.8(solr6.6是 1.8编译的) / Tomcat8 / Solr6.6 各软件
2、 下载 : 下载 solr 6.6 版本:http://www.apache.org/dyn/closer.lua/lucene/solr/6.6.0
3、将 solr 压缩包中 solr 6.6 下的server\solr-webapp\文件夹下有个webapp文件夹,将之复制到Tomcat\webapps\目录下,并改成solr (名字随意,通过浏览器进行访问solr管理界面时要用到)
4、将 solr 压缩包中 solr 6.6\server\lib\ext 中的 jar 全部复制到 Tomcat\ webapps\solr\WEB-INF\lib 目录中, solr 6.6\server\lib\中以metrics开头的jar复制到 Tomcat\ webapps\solr\WEB-INF\lib 中
5、将 solr 压缩包中 solr 6.6/ server/resources /log4j.properties 复制到Tomcat\ webapps\solr\WEB-INF\lib 目录中
6、将 solr 压缩包中 solr 6.6/server/solr/ 目录下的solr.xml,zoo.cfg,README.txt复制到计算机某个目录下,如D:\solr_home
在solr_home目录下新建一个文件建solr_core,
将 solr 压缩包中 solr 6.6/server/solr/ configsets/basic_configs目录下conf目录复制到复制到上一步新建的文件solr_core内 即:D:\solr_home\solr_core
7、打开Tomcat/webapps/solr/WEB-INF下的web.xml,找到如下配置内容(初始状态下该内容是被注释掉的):
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>Java.lang.String</env-entry-type>
</env-entry>
将<env-entry-value>中的内容改成你的solr_home路径,这里是D:/solr_home
注释权限控制
8、保存关闭,而后启动tomcat,我这里改的是8081的端口,所以在浏览器输入http://localhost:8081/solr即可出现Solr的管理界面如下:
9选中CoreAdmin来创建一个core用来保存数据
创建成功后会在solrhome/solr_core下生产data文件夹,以及core.properties文件
通过程序调用的时候可以通过url :http://ip:port/solr/solr_core来使用solr服务,solr可以建立多个core,步骤5,6重复即可
二,JAVA使用SolrJ调用Solr服务
pom中引入
执行java代码出现unknow filed ’name’ exception时,在solr_home目录中的conf内的配置文件managed-schema加上 field配置
JAVA代码:
测试结果:
springboot配置:https://git.oschina.net/kerry_li/spring-data-solr-showcase
springmvc 配置:https://git.oschina.net/kerry_li/spring-solr-test
1、安装Jdk1.8(solr6.6是 1.8编译的) / Tomcat8 / Solr6.6 各软件
2、 下载 : 下载 solr 6.6 版本:http://www.apache.org/dyn/closer.lua/lucene/solr/6.6.0
3、将 solr 压缩包中 solr 6.6 下的server\solr-webapp\文件夹下有个webapp文件夹,将之复制到Tomcat\webapps\目录下,并改成solr (名字随意,通过浏览器进行访问solr管理界面时要用到)
4、将 solr 压缩包中 solr 6.6\server\lib\ext 中的 jar 全部复制到 Tomcat\ webapps\solr\WEB-INF\lib 目录中, solr 6.6\server\lib\中以metrics开头的jar复制到 Tomcat\ webapps\solr\WEB-INF\lib 中
5、将 solr 压缩包中 solr 6.6/ server/resources /log4j.properties 复制到Tomcat\ webapps\solr\WEB-INF\lib 目录中
6、将 solr 压缩包中 solr 6.6/server/solr/ 目录下的solr.xml,zoo.cfg,README.txt复制到计算机某个目录下,如D:\solr_home
在solr_home目录下新建一个文件建solr_core,
将 solr 压缩包中 solr 6.6/server/solr/ configsets/basic_configs目录下conf目录复制到复制到上一步新建的文件solr_core内 即:D:\solr_home\solr_core
7、打开Tomcat/webapps/solr/WEB-INF下的web.xml,找到如下配置内容(初始状态下该内容是被注释掉的):
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>Java.lang.String</env-entry-type>
</env-entry>
将<env-entry-value>中的内容改成你的solr_home路径,这里是D:/solr_home
注释权限控制
<!-- <security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Enable everything but TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method-omission>TRACE</http-method-omission> </web-resource-collection> </security-constraint> -->
8、保存关闭,而后启动tomcat,我这里改的是8081的端口,所以在浏览器输入http://localhost:8081/solr即可出现Solr的管理界面如下:
9选中CoreAdmin来创建一个core用来保存数据
创建成功后会在solrhome/solr_core下生产data文件夹,以及core.properties文件
通过程序调用的时候可以通过url :http://ip:port/solr/solr_core来使用solr服务,solr可以建立多个core,步骤5,6重复即可
二,JAVA使用SolrJ调用Solr服务
pom中引入
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.0</version> </dependency>
执行java代码出现unknow filed ’name’ exception时,在solr_home目录中的conf内的配置文件managed-schema加上 field配置
<field name="name" type="string" indexed="true" stored="true"/> <field name="description" type="string" indexed="true" stored="true"/>
JAVA代码:
package org.springframework.data.solr.showcase; import org.apache.solr.client.solrj.beans.Field; public class Person { @Field private String id; @Field private String name; @Field private String description; public Person() { } public Person(String id, String name, String description) { this.id = id; this.name = name; this.description = description; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", description=" + description + "]"; } }
package org.springframework.data.solr.showcase; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; 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 org.apache.solr.common.params.FacetParams; public class SolrTest { //指定solr服务器的地址 private final static String SOLR_URL = "http://localhost:8081/solr/"; private String solrCore="solr_core";//指定的存储数据的collection /** * 创建SolrServer对象 * * 该对象有两个可以使用,都是线程安全的 * 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的 * 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了 * 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient * * @return */ public HttpSolrClient createSolrServer(){ HttpSolrClient solr = null; solr = new HttpSolrClient(SOLR_URL); solr.setConnectionTimeout(100); solr.setDefaultMaxConnectionsPerHost(100); solr.setMaxTotalConnections(100); return solr; } public void addPersonBatch() throws IOException, SolrServerException{ List<Person> list = new ArrayList<Person>(); list.add(new Person("1","zhangsanfeng","我是张三丰")); list.add(new Person("2","zhangsanfeng123","我是张三丰123")); list.add(new Person("3","zhangsan123","我是张三")); list.add(new Person("4","zhangsan123456","我是张三")); list.add(new Person("5","lisi","李四")); list.add(new Person("6","lisi5","我是lisi")); list.add(new Person("7","wangwu","王五")); list.add(new Person("8","wangwu","王五002")); HttpSolrClient solr = new HttpSolrClient(SOLR_URL + solrCore); solr.addBeans(list); solr.commit(); solr.close(); } public void addPersonIndex() throws IOException, SolrServerException{ Person p = new Person(); p.setId("9"); p.setName("zhangsan"); p.setDescription("张三"); HttpSolrClient solr = new HttpSolrClient(SOLR_URL + solrCore); solr.addBean(p); solr.commit(); solr.close(); } /** * 往索引库添加文档 * @throws IOException * @throws SolrServerException */ public void addDoc() throws SolrServerException, IOException{ //构造一篇文档 SolrInputDocument document = new SolrInputDocument(); //往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义 document.addField("id", "10"); document.addField("name", "JAVA大神"); document.addField("description", "世界上最牛逼的JAVA大神"); //获得一个solr服务端的请求,去提交 ,选择具体的某一个solr core HttpSolrClient solr = new HttpSolrClient(SOLR_URL + solrCore); solr.add(document); solr.commit(); solr.close(); } /** * 根据id从索引库删除文档 */ public void deleteDocumentById() throws Exception { //选择具体的某一个solr core HttpSolrClient server = new HttpSolrClient(SOLR_URL+solrCore); //删除文档 // server.deleteById("8"); //删除所有的索引 server.deleteByQuery("*:*"); //提交修改 server.commit(); server.close(); } /** * 查询 * @throws Exception */ public void querySolr() throws Exception{ HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL+solrCore); SolrQuery query = new SolrQuery(); //下面设置solr查询参数 // query.set("q", "*:*");// 参数q 查询所有 // query.set("q","*zhangsan*");//相关查询,比如某条数据某个字段含有周、星、驰三个字 将会查询出来 ,这个作用适用于联想查询 //参数fq, 给query增加过滤查询条件 // query.addFilterQuery("id:[0 TO 9]");//id为0-9 //给query增加布尔过滤条件 //query.addFilterQuery("description:演员"); //description字段中含有“演员”两字的数据 //参数df,给qu d23b ery设置默认搜索域 // query.set("df", "name"); query.setQuery("name:*"); // query.setQuery("name:*zhangsan* OR name:*123*" );//name 包含zhangsan或者123 // query.setQuery("name:*zhangsan* AND description:*zhangsan*" );// name包含且 //分组查询 query.setFacet(true); query.addFacetField("name","description");//两个域有各自独立的结果 /* * FacetComponet有两种排序选择,分别是count和index, * count是按每个词出现的次数,index是按词的字典顺序。如果查询参数不指定facet.sort,solr默认是按count排序。 */ query.setFacetSort(FacetParams.FACET_SORT_COUNT); /*query.setFacetLimit(101); */ // 设置返回结果条数 ,-1表示返回所有,默认值为100 /* query.setParam(FacetParams.FACET_OFFSET, "100");*/ //开始条数,偏移量,它与facet.limit配合使用可以达到分页的效果 query.setFacetMinCount(1);//设置 限制 count的最小返回值,默认为0 query.setFacetMissing(false);//不统计null的值 /* query.setFacetPrefix("test");//设置前缀 */ //参数sort,设置返回结果的排序规则 // query.addSort("id",SolrQuery.ORDER.asc); // query.addSort("name", SolrQuery.ORDER.desc); //设置分页参数 // query.setStart(0); // query.setRows(10);//每一页多少值 //参数hl,设置高亮 query.setHighlight(true); //设置高亮的字段 query.addHighlightField("name"); //设置高亮的样式 query.setHighlightSimplePre("<font color='red'>"); query.setHighlightSimplePost("</font>"); //获取查询结果 QueryResponse response = solrServer.query(query); //两种结果获取:得到文档集合或者实体对象 // 获取高亮数据结果 //Map<String, Map<String, List<String>>> map = response.getHighlighting(); // 得到FacetField结果 System.out.println(response.getFacetFields()); //获取高亮数据结果 System.out.println("高亮数据结果"+response.getHighlighting()); //查询得到文档的集合 SolrDocumentList solrDocumentList = response.getResults(); System.out.println("通过文档集合获取查询文档数量:"+solrDocumentList.getNumFound()); //遍历列表 for (SolrDocument doc : solrDocumentList) { System.out.println("id:"+doc.get("id")+" name:"+doc.get("name")+" description:"+doc.get("description")); } //得到实体对象 List<Person> tmpLists = response.getBeans(Person.class); if(tmpLists!=null && tmpLists.size()>0){ System.out.println("实体对象赋值内容:"); for(Person per:tmpLists){ System.out.println(per.toString()); } } } public static void main(String[] args) throws Exception { SolrTest solr = new SolrTest(); //solr.createSolrServer(); solr.addDoc(); solr.addPersonIndex(); solr.addPersonBatch(); // solr.deleteDocumentById(); solr.querySolr(); } }
测试结果:
分组结果:[name:[wangwu (2), JAVA大神 (1), lisi (1), lisi5 (1), zhangsan (1), zhangsan123 (1), zhangsan123456 (1), zhangsanfeng (1), zhangsanfeng123 (1)], description:[我是张三 (2), 世界上最牛逼的JAVA大神 (1), 张三 (1), 我是lisi (1), 我是张三丰 (1), 我是张三丰123 (1), 李四 (1), 王五 (1), 王五002 (1)]] 高亮数据结果:{3={name=[<font color='red'>zhangsan123</font>]}, 2={name=[<font color='red'>zhangsanfeng123</font>]}, 1={name=[<font color='red'>zhangsanfeng</font>]}, 10={name=[<font color='red'>JAVA大神</font>]}, 7={name=[<font color='red'>wangwu</font>]}, 6={name=[<font color='red'>lisi5</font>]}, 5={name=[<font color='red'>lisi</font>]}, 4={name=[<font color='red'>zhangsan123456</font>]}, 9={name=[<font color='red'>zhangsan</font>]}, 8={name=[<font color='red'>wangwu</font>]}} 通过文档集合获取查询文档数量:10 id:10 name:JAVA大神 description:世界上最牛逼的JAVA大神 id:9 name:zhangsan description:张三 id:1 name:zhangsanfeng description:我是张三丰 id:2 name:zhangsanfeng123 description:我是张三丰123 id:3 name:zhangsan123 description:我是张三 id:4 name:zhangsan123456 description:我是张三 id:5 name:lisi description:李四 id:6 name:lisi5 description:我是lisi id:7 name:wangwu description:王五 id:8 name:wangwu description:王五002 实体对象赋值内容: Person [id=10, name=JAVA大神, description=世界上最牛逼的JAVA大神] Person [id=9, name=zhangsan, description=张三] Person [id=1, name=zhangsanfeng, description=我是张三丰] Person [id=2, name=zhangsanfeng123, description=我是张三丰123] Person [id=3, name=zhangsan123, description=我是张三] Person [id=4, name=zhangsan123456, description=我是张三] Person [id=5, name=lisi, description=李四] Person [id=6, name=lisi5, description=我是lisi] Person [id=7, name=wangwu, description=王五] Person [id=8, name=wangwu, description=王五002]
springboot配置:https://git.oschina.net/kerry_li/spring-data-solr-showcase
springmvc 配置:https://git.oschina.net/kerry_li/spring-solr-test
相关文章推荐
- JAVAWEB开发之Solr的入门——Solr的简介以及简单配置和使用、solrJ的使用、Solr数据同步插件
- solr学习笔记(3)--使用solrj调用solr服务
- 框架 day80 涛涛商城项目-redis安装单机版solr,搭建搜索服务层,solrJ使用
- 使用PHPHessian调用Java Spring Hessian暴露服务­
- webservice学习之使用java发布webservice以及调用
- 学习笔记:使用Web Service Software Factory开发简易留言本服务以及Mobile调用实现-1.创建Service
- CXF之使用工厂方法(java代码)发布服务与进行客户端调用
- ubuntu14.04下的java jdk和eclipse和C/C++ Development Tools的简单安装以及使用
- android学习笔记---53_采用网页设计软件界面,以及使用android系统内置的浏览器,利用js调用java方法
- Solr JAVA客户端SolrJ 4.9使用示例教程
- solr安装以及php调用
- 企业级搜索应用服务器Solr4.10.4部署开发详解(3)- Solr使用-使用java客户端solrj进行增删改查开发
- 维基百科api的简单调用以及wiki 标记的转义(pear的安装以及使用)
- 使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 1 部分: 实现调用模式
- Java学习笔记——MySQL的安装使用以及SQL语法简介
- ftp服务软件安装和使用以及目录访问权限设置
- Java调用使用SSL/HTTPS协议来传输的axis webservice服务
- 使用javaService将jboss安装成windows的服务
- 项目记录:solr4.2 在tomcat7 的两种(singlecore + multicore) 配置安装 及solrj 的初步使用
- java调用oracle 存储过程 以及游标使用