未加星标

Solr6使用SolrJ导入XML数据

字体大小 | |
[数据库(综合) 所属分类 数据库(综合) | 发布者 店小二04 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏
需要的软件支持
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,这是一个开源项目,号称有最快的解析速度,可以方便地进行序列化和反序列化操作。
转化JSON数据:ConvertJSON.java
package com.trainning.project.json;
import java.util.List;
import com.alibaba.fastjson.JSON;
public class ConvertJSON {
public static List jsonToList(String json){
//把JSON文本parse成JavaBean集合
List list = JSON.parseArray(json,CDBean.class);
//打印一下list的内容,调试时用
list.stream().forEach(System.out::println);
return list;
}
}
使用SolrJ将List数据导入到Solr数据库
新建一个文件SolrPublisher.java
package 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 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://这个参数采用通配符的方式,指定一个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=* : *

本文数据库(综合)相关术语:系统安全软件

主题: SolrXMLTI数据MPAJavaRY开源文化UT
分页:12
转载请注明
本文标题:Solr6使用SolrJ导入XML数据
本站链接:http://www.codesec.net/view/483659.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(综合) | 评论(0) | 阅读(47)