Solr6使用SolrJ导入JSON数据
2016-10-16 22:14
513 查看
摘要: 之前,曾讨论过如何使用SolrJ将XML文件数据导入到Solr数据库,参见http://blog.csdn.net/jiangchao858/article/details/52766017。这次,使用的数据结构是JSON,解析过程将更为简单。
Solr6.0
Eclipse 4.5
solr-solrj-6.0.0.jar
dom4j-1.6.1.jar
fastjson-1.2.7.jar
读取JSON文件数据:ReadJSONFile.java
将json数据转化为java对象,我这里使用到了阿里巴巴的fastjson,这是一个开源项目,号称有最快的解析速度,可以方便地进行序列化和反序列化操作。
创建javabean: CDBean.java
转化JSON数据:ConvertJSON.java
访问: http://localhost:8080/solr/core0/select?q=* : *
最后,你可以在这里 或https://github.com/cj96248/solr找到项目的源代码。
需要的软件支持
JDK1.8以上Solr6.0
Eclipse 4.5
solr-solrj-6.0.0.jar
dom4j-1.6.1.jar
fastjson-1.2.7.jar
JSON文档转换为Java对象
我准备了一段JSON数据,保存在cd.json文档中。[ { "TITLE": "皇帝讽刺剧", "ARTIST": "鲍勃·迪伦", "COUNTRY": "美国", "COMPANY": "哥伦比亚", "PRICE": "10.90", "YEAR": "1985", "DESCRIPTION": "夏天的午后听Bob Dylan的歌特别容易被催眠" }, { "TITLE": "隐藏自己的心", "ARTIST": "邦尼泰勒", "COUNTRY": "英国", "COMPANY": "哥伦比亚广播公司", "PRICE": "9.90", "YEAR": "1988", "DESCRIPTION": "对未来,永远抱著乐观与喜悦的态度" }, { "TITLE": "精选辑", "ARTIST": "桃莉·巴顿", "COUNTRY": "美国", "COMPANY": "美国无线电公司", "PRICE": "9.90", "YEAR": "1982", "DESCRIPTION": "美国历史上最畅销的录音室唱片" }, { "TITLE": "依然忧郁", "ARTIST": "盖瑞摩尔", "COUNTRY": "英国", "COMPANY": "维京唱片", "PRICE": "10.20", "YEAR": "1990", "DESCRIPTION": "在听到他们的现场之后,会爱上这些老男人的声音" }, { "TITLE": "厄洛斯", "ARTIST": "艾罗斯雷玛若提", "COUNTRY": "欧盟", "COMPANY": "贝塔斯曼音乐集团", "PRICE": "9.90", "YEAR": "1997", "DESCRIPTION": "这张专辑以希腊神话中的人物为音乐背景,突显了希腊作为一个文明古国所拥有的很深厚的文化积淀" }, { "TITLE": "仅此一夜", "ARTIST": "比吉斯乐队", "COUNTRY": "英国", "COMPANY": "环球唱片", "PRICE": "10.90", "YEAR": "1998", "DESCRIPTION": "青春活力十足,主唱声线可塑性强" }, { "TITLE": "麦其·梅", "ARTIST": "罗德·斯图尔特", "COUNTRY": "英国", "COMPANY": "匹克威克", "PRICE": "8.50", "YEAR": "1990", "DESCRIPTION": "作者是最有才华的词曲作者之一,是二十世纪六十年代中期的英国入侵浪潮之后的标志性人物之一。" }, { "TITLE": "浪漫曲", "ARTIST": "安德烈·波伽利", "COUNTRY": "欧盟", "COMPANY": "环球唱片", "PRICE": "10.80", "YEAR": "1996", "DESCRIPTION": "独一无二的声音的力量、那令人难以抗拒的温暖的感觉,这使得语言和文化都不再是阻挡交流的障碍。" }, { "TITLE": "当男人爱上女人", "ARTIST": "普西·斯乐巨", "COUNTRY": "美国", "COMPANY": "大西洋", "PRICE": "8.70", "YEAR": "1987", "DESCRIPTION": "他无法假装若无其事,他会用全世界来交换,只为了他找到的好东西.即使她很坏,他也看不见,她不会有错,他会背弃他最要好" }, { "TITLE": "美好时光", "ARTIST": "肯尼·罗杰斯", "COUNTRY": "英国", "COMPANY": "Mucik Master", "PRICE": "8.70", "YEAR": "1995", "DESCRIPTION": "这哥们的歌都是自觉自发热爱自己一亩三分地的城市贫民心声,毫无怨言。永远欢乐,永远飞的大。" }, { "TITLE": "大丈夫日记", "ARTIST": "威尔·史密斯", "COUNTRY": "美国", "COMPANY": "哥伦比亚", "PRICE": "9.90", "YEAR": "1997", "DESCRIPTION": "这个还真纽约那种感觉,特派对,流说。而且阵容强大,真正的全能明星。" } ]
读取JSON文件数据:ReadJSONFile.java
package com.trainning.project.json; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class ReadJSONFile { /** * 将json文件数据读取到内存 * @param filepath * @return json string */ public static String readFile(String filepath){ String json = ""; try { File file = new File(filepath); FileInputStream fis = new FileInputStream(file); InputStreamReader isInputStreamReader = new InputStreamReader(fis, "UTF-8"); BufferedReader brReader = new BufferedReader(isInputStreamReader); String line; while((line = brReader.readLine()) != null){ json += line; } brReader.close(); isInputStreamReader.close(); } catch (Exception e) { e.printStackTrace(); } return json; } }
将json数据转化为java对象,我这里使用到了阿里巴巴的fastjson,这是一个开源项目,号称有最快的解析速度,可以方便地进行序列化和反序列化操作。
创建javabean: CDBean.java
package com.trainning.project.json; public class CDBean { private String title; private String artist; private String country; private String company; private double price; private String year; private String description; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getArtist() { return artist; } ...... public void setDescription(String description) { this.description = description; } @Override public String toString() { return "CD :[title=" + title + ", artist=" + artist + ", country=" + country + ", company=" + company + ", price=" + price + ", year=" + year + ", description=" + description + "]"; } }
转化JSON数据:ConvertJSON.java
package com.trainning.project.json; import java.util.List; import com.alibaba.fastjson.JSON; public class ConvertJSON { public static List<CDBean> jsonToList(String json){ //把JSON文本parse成JavaBean集合 List<CDBean> list = JSON.parseArray(json,CDBean.class); //打印一下list的内容,调试时用 list.stream().forEach(System.out::println); return list; } }
使用SolrJ将List数据导入到Solr数据库
新建一个文件SolrPublisher.javapackage com.trainning.project.json; import java.util.List; import java.util.UUID; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.common.SolrInputDocument; public class SolrPublisher { public static final String SOLR_URL = "http://localhost:8080/solr/core0"; private HttpSolrClient client; public SolrPublisher() { client = new HttpSolrClient(SOLR_URL); } public void insertDataToSolr() throws Exception{ String filepath = "src/main/java/com/trainning/project/json/cd.json"; String json = ReadJSONFile.readFile(filepath); List<CDBean> list = ConvertJSON.jsonToList(json); client.deleteByQuery("*:*");//清空solr中原有数据 for(CDBean cd : list){ SolrInputDocument input = new SolrInputDocument(); //ID是数据的主键,原则上必须指定,并且不能重复。便于数据管理,如删除操作 input.addField("id", UUID.randomUUID().toString(), 1.0f); //这里的addField方法第一个参数需要在core0/conf/managed-schema中有对应的field //参数使用的是managed-schema中有对应的field:<dynamicField name="*_s" type="string" indexed="true" stored="true"/> //这个参数采用通配符的方式,指定一个string类型的字段 input.addField("title_s", cd.getTitle()); input.addField("artist_s", cd.getArtist()); input.addField("country_s", cd.getCountry()); input.addField("company_s", cd.getCompany()); input.addField("price_d", cd.getPrice()); input.addField("year_s", cd.getYear()); input.addField("description_s", cd.getDescription()); client.add(input); } //不能忘记提交 client.commit(); } /** * 使用main方法测试整个插入过程是否能成功 */ public static void main(String[] args) { SolrPublisher publisher = new SolrPublisher(); try { publisher.insertDataToSolr(); } catch (Exception e) { e.printStackTrace(); } } }
查看Solr中的数据
直接使用http方式来查询solr中的数据。访问: http://localhost:8080/solr/core0/select?q=* : *
最后,你可以在这里 或https://github.com/cj96248/solr找到项目的源代码。
相关文章推荐
- solr6使用solrJ做XML数据导入
- solr使用curl导入json数据以及admin页面删除索引数据
- [置顶] 【Solr】深入浅出Solr(三)——使用Solrj向索引库中导入数据
- 13.5.SolrCloud集群使用手册之数据导入
- Solr json,xml等文件数据导入(添加索引)linux下操作
- 使用curl向Solr导入json文件(Windows、Linux均可)
- solr索引库添加新的索引,使用json文件或者xml文件的数据
- JAVAWEB开发之Solr的入门——Solr的简介以及简单配置和使用、solrJ的使用、Solr数据同步插件
- solr服务快速搭建、配置中文分词、数据导入即solrj增删改查
- java搜索引擎Apache的solr初探-安装使用导入mysql数据
- Solr(二)使用solrJ对solr进行导入、查询、删除操作
- Solr 7.2 使用DataImportHandler导入数据库数据
- 使用 Solr 创建 Core 并导入数据库数据
- 使用solr从mysql数据中导入数据
- cool-2018-03-09-linux下安装单机版solr-4.10--solr导入数据之solrj
- (三) solr 索引数据导入:json格式
- Solr 数据导入 <一>DIH简单使用
- Solr 数据导入 <一>DIH简单使用
- Solr-----7、Solr使用DataImportHandler导入数据库数据
- CDH离线数据导入solr:利用MapReduceIndexerTool将json文件批量导入到solr