Solr-6.5.1之Solrj的使用
来源:互联网 发布:看书哪个软件好 编辑:程序博客网 时间:2024/06/04 18:33
第一步:添加maven依赖
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.5.1</version></dependency>
第二步:书写solr连接类
package solrTest;import org.apache.solr.client.solrj.impl.HttpSolrClient;/** * * @ClassName: SolrServer * @Description: solr连接类 * @author cheng * @date 2017年7月24日 上午9:15:51 */public class SolrServer { private static HttpSolrClient server = null; private static String url = "http://localhost:8080/Solr/db";//其中db为自定义的core名称 @SuppressWarnings("deprecation") public static HttpSolrClient getServer() { if (server == null) { server = new HttpSolrClient(url); server.setDefaultMaxConnectionsPerHost(1000); server.setMaxTotalConnections(10000);// 最大连接数 server.setConnectionTimeout(60000);// 设置连接超时时间(单位毫秒) 1000 server.setSoTimeout(60000);//// 设置读数据超时时间(单位毫秒) 1000 server.setFollowRedirects(false);// 遵循从定向 server.setAllowCompression(true);// 允许压缩 } return server; } //测试 public static void main(String[] args) { System.out.println(getServer()); }}
第三步:书写原生测试类
package solrTest;import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.UUID;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrQuery.SortClause;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.SolrParams;import org.apache.solr.common.util.NamedList;import org.junit.Test;import com.ahutshop.entity.GoodsType;/** * * @ClassName: SolrTest * @Description:测试 * @author cheng * @date 2017年7月24日 上午9:16:58 */public class SolrTest { /** * 添加/修改 索引 * @throws Exception */ public static void addIndex() throws Exception { HttpSolrClient server = SolrServer.getServer(); SolrInputDocument doc = new SolrInputDocument(); doc.addField("typeId", UUID.randomUUID().toString().replace("-", "")); // 修改相同id的信息 // doc.addField("typeId", "e0e2283932194628b6a5eee9c263c533"); doc.addField("typeName", "测试测试测试多个测试"); doc.addField("createTime", new Date()); doc.addField("updateTime", new Date()); server.add(doc); server.commit(); } /** * 删除索引 按id * @throws Exception */ public static void deleteById() throws Exception { HttpSolrClient server = SolrServer.getServer(); server.deleteById("48815aa736da482dbb47e1eed06cc68a");// 按id删除 server.commit(); } /** * 查询所有索引 * @throws Exception */ public static void query() throws Exception { HttpSolrClient server = SolrServer.getServer(); SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.setStart(0);// 开始记录数 query.setRows(10000);// 总条数 QueryResponse queryResponse = server.query(query); SolrDocumentList results = queryResponse.getResults(); System.out.println("总条数为:" + results.getNumFound()); for (int i = 0; i < results.size(); i++) { System.out.println(results.get(i).getFieldNames()); for (String name : results.get(i).getFieldNames()) { System.out.println(results.get(i).getFieldValue(name)); } } }}
第四步:创建javabean
package com.ahutshop.entity;import java.io.Serializable;import java.util.Date;import org.apache.solr.client.solrj.beans.Field;/** * * @ClassName: GoodsType * @Description: 商品类型实体类 * @author cheng * @date 2017年7月12日 下午5:37:33 */public class GoodsType implements Serializable{ private static final long serialVersionUID = -4039634130866820668L; @Field private String typeId;//类型id @Field private String typeName;//类型名称 @Field private Date createTime;//创建时间 @Field private Date updateTime;//更新时间 /** * 重写tostring */ @Override public String toString() { return "GoodsType [typeId=" + typeId + ", typeName=" + typeName + ", createTime=" + createTime + ", updateTime=" + updateTime + "]"; } /** * 无参构造函数 */ public GoodsType() { super(); } /** * 有参构造函数 * @param typeId * @param typeName * @param createTime * @param updateTime */ public GoodsType(String typeId, String typeName, Date createTime, Date updateTime) { super(); this.typeId = typeId; this.typeName = typeName; this.createTime = createTime; this.updateTime = updateTime; } public String getTypeId() { return typeId; } public void setTypeId(String typeId) { this.typeId = typeId; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }}
第五步:使用SolrBean进行增删改查
public class SolrBean { /** * 按Bean 添加/修改 索引 * @throws Exception */ public static void addIndex1() throws Exception { HttpSolrClient server = SolrServer.getServer(); // 添加 //id如果重复则为修改 GoodsType type = new GoodsType(UUID.randomUUID().toString().replace("-", ""), "交通工具测试", new Date(), new Date()); server.addBean(type); server.commit(); } /** * 删除索引 按查询 * @throws Exception */ public static void deleteByQuery(String query) throws Exception { HttpSolrClient server = SolrServer.getServer(); query = "*:*"; server.deleteByQuery(query); server.commit(); } // 查询索引 public static void query1() throws Exception { HttpSolrClient server = SolrServer.getServer(); SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.setStart(0);// 开始记录数 query.setRows(10000);// 总条数 QueryResponse queryResponse = server.query(query); List<GoodsType> results = queryResponse.getBeans(GoodsType.class); System.out.println("总条数为:" + results.size()); for (GoodsType testBean : results) { System.out.println(testBean.toString()); } }}
第六步:solrj复杂查询
// 查询索引 public static void query1() throws Exception { HttpSolrClient server = SolrServer.getServer(); SolrQuery query = new SolrQuery(); /* * 1、常用 q :查询字符串,这个是必须的。如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京) * 注意:AND要大写 否则会被当做默认OR */ //query.setQuery("*:*"); /* * fq : (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的, * 例如:q=查询全部&fq=只要title得值为:xxxx */ //query.setFilterQueries("typeName:测试"); /* * fl : 指定返回那些字段内容,用逗号或空格分隔多个。 */ // query.setFields("typeId,typeName"); /* * sort : 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… * 。 示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。 */ SortClause sort1 = new SortClause("createTime", ORDER.asc); SortClause sort2 = new SortClause("updateTime", ORDER.desc); List<SortClause> sortList = new ArrayList<SortClause>(); sortList.add(sort1); sortList.add(sort2); // query.setSort("createTime", ORDER.asc); query.setSorts(sortList); query.setQuery("typeName:测试"); // 设置查询关键字 query.setHighlight(true); // 开启高亮 query.addHighlightField("typeName"); // 高亮字段 query.setHighlightSimplePre("<font color='red'>"); // 高亮单词的前缀 query.setHighlightSimplePost("</font>"); // 高亮单词的后缀 query.setStart(0);// 开始记录数 query.setRows(10000);// 总条数 // QueryResponse queryResponse = server.query(query); // List<GoodsType> results = queryResponse.getBeans(GoodsType.class); // System.out.println("总条数为:" + results.size()); // for (GoodsType testBean : results) { // System.out.println(testBean.toString()); // } QueryResponse queryResponse = server.query(query); List<GoodsType> results = queryResponse.getBeans(GoodsType.class); int index = 0; // 返回所有的结果... SolrDocumentList documentList = queryResponse.getResults(); Map<String, Map<String, List<String>>> maplist = queryResponse.getHighlighting(); System.out.println(documentList); System.out.println(maplist); for(SolrDocument document : documentList){ String typeId = (String) document.getFieldValue("typeId"); String typeName = maplist.get(typeId).get("typeName").get(0); results.get(index).setTypeName(typeName); index++; } for(GoodsType type : results){ System.out.println(type); } }
阅读全文
0 0
- Solr-6.5.1之Solrj的使用
- Solr solrj的使用
- solr-solrj的使用
- Solr文档学习--Solrj的使用
- solr cloud系列-solrj的使用
- Solr JAVA客户端SolrJ的使用
- solr学习笔记 -- day05 solrJ的使用
- solr 7.1.0中solrJ的使用
- Solr之客户端SolrJ
- 使用solrj操作solr
- 使用solrJ操作solr
- solr系列--solrj使用
- solr/solrj之原子更新
- solrj之solr基本应用!
- Solr使用初探——SolrJ的使用
- Solr使用初探——SolrJ的使用
- Solr使用初探——SolrJ的使用
- Solr使用初探——SolrJ的使用
- Java 生产者消费者
- 【muduo】线程池
- 关于workerman在Thinkphp5的应用
- 仿京东下拉刷新动画的源码查看——自定义控件学习(一)
- 安卓长安保存图片三种方案的对比
- Solr-6.5.1之Solrj的使用
- poj-1836-士兵出列问题-双向LIS
- Linux下PHP安装curl扩展支持https
- 【并查集】poj 1611 The Suspects
- 堆排序
- 30分钟掌握ES6/ES2015核心内容
- 快速幂算法和大整数求模
- iOS UIWindow
- Frequently Used --- 连载