solr6使用solrJ做XML数据导入
2016-10-09 16:04
387 查看
摘要: Solr6.0的solrJ接口有部分变化,我将使用SolrJ的API,把一段XML文档数据插入到Solr数据库中。
Solr6.0
Eclipse 4.5
solr-solrj-6.0.0.jar
dom4j-1.6.1.jar
首先需要读文件,将XML文件以流的形式读取出来。
建立java bean, CD.java
将XML文档转换为Java bean, ReadXMLFile.java
用Java将XML文件转换为Java对象,可以使用dom4j或者sax解析方式。这里使用SAX方式解析,返回得到的数据List集合。
访问: 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
XML文档转换为Java对象
我准备了一段XML数据,保存在cd.xml文档中。<CATALOG> <CD> <TITLE>皇帝讽刺剧</TITLE> <ARTIST>鲍勃·迪伦</ARTIST> <COUNTRY>美国</COUNTRY> <COMPANY>哥伦比亚</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> <DESCRIPTION>夏天的午后听Bob Dylan的歌特别容易被催眠</DESCRIPTION> </CD> <CD> <TITLE>隐藏自己的心</TITLE> <ARTIST>邦尼泰勒</ARTIST> <COUNTRY>英国</COUNTRY> <COMPANY>哥伦比亚广播公司</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> <DESCRIPTION>对未来,永远抱著乐观与喜悦的态度</DESCRIPTION> </CD> <CD> <TITLE>精选辑</TITLE> <ARTIST>桃莉·巴顿</ARTIST> <COUNTRY>美国</COUNTRY> <COMPANY>美国无线电公司</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> <DESCRIPTION>美国历史上最畅销的录音室唱片</DESCRIPTION> </CD> <CD> <TITLE>依然忧郁</TITLE> <ARTIST>盖瑞摩尔</ARTIST> <COUNTRY>英国</COUNTRY> <COMPANY>维京唱片</COMPANY> <PRICE>10.20</PRICE> <YEAR>1990</YEAR> <DESCRIPTION>在听到他们的现场之后,会爱上这些老男人的声音</DESCRIPTION> </CD> <CD> <TITLE>厄洛斯</TITLE> <ARTIST>艾罗斯雷玛若提</ARTIST> <COUNTRY>欧盟</COUNTRY> <COMPANY>贝塔斯曼音乐集团</COMPANY> <PRICE>9.90</PRICE> <YEAR>1997</YEAR> <DESCRIPTION>这张专辑以希腊神话中的人物为音乐背景,突显了希腊作为一个文明古国所拥有的很深厚的文化积淀</DESCRIPTION> </CD> <CD> <TITLE>仅此一夜</TITLE> <ARTIST>比吉斯乐队</ARTIST> <COUNTRY>英国</COUNTRY> <COMPANY>环球唱片</COMPANY> <PRICE>10.90</PRICE> <YEAR>1998</YEAR> <DESCRIPTION>青春活力十足,主唱声线可塑性强</DESCRIPTION> </CD> <CD> <TITLE>麦其·梅</TITLE> <ARTIST>罗德·斯图尔特</ARTIST> <COUNTRY>英国</COUNTRY> <COMPANY>匹克威克</COMPANY> <PRICE>8.50</PRICE> <YEAR>1990</YEAR> <DESCRIPTION>作者是最有才华的词曲作者之一,是二十世纪六十年代中期的英国入侵浪潮之后的标志性人物之一。</DESCRIPTION> </CD> <CD> <TITLE>浪漫曲</TITLE> <ARTIST>安德烈·波伽利</ARTIST> <COUNTRY>欧盟</COUNTRY> <COMPANY>环球唱片</COMPANY> <PRICE>10.80</PRICE> <YEAR>1996</YEAR> <DESCRIPTION>独一无二的声音的力量、那令人难以抗拒的温暖的感觉,这使得语言和文化都不再是阻挡交流的障碍。</DESCRIPTION> </CD> <CD> <TITLE>当男人爱上女人</TITLE> <ARTIST>普西·斯乐巨</ARTIST> <COUNTRY>美国</COUNTRY> <COMPANY>大西洋</COMPANY> <PRICE>8.70</PRICE> <YEAR>1987</YEAR> <DESCRIPTION>他无法假装若无其事,他会用全世界来交换,只为了他找到的好东西.即使她很坏,他也看不见,她不会有错,他会背弃他最要好</DESCRIPTION> </CD> <CD> <TITLE>美好时光</TITLE> <ARTIST>肯尼·罗杰斯</ARTIST> <COUNTRY>英国</COUNTRY> <COMPANY>Mucik Master</COMPANY> <PRICE>8.70</PRICE> <YEAR>1995</YEAR> <DESCRIPTION>这哥们的歌都是自觉自发热爱自己一亩三分地的城市贫民心声,毫无怨言。永远欢乐,永远飞的大。</DESCRIPTION> </CD> <CD> <TITLE>大丈夫日记</TITLE> <ARTIST>威尔·史密斯</ARTIST> <COUNTRY>美国</COUNTRY> <COMPANY>哥伦比亚</COMPANY> <PRICE>9.90</PRICE> <YEAR>1997</YEAR> <DESCRIPTION>这个还真纽约那种感觉,特派对,流说。而且阵容强大,真正的全能明星。</DESCRIPTION> </CD> </CATALOG>
首先需要读文件,将XML文件以流的形式读取出来。
建立java bean, CD.java
package com.trainning.project; public class CD { 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 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 + "]"; } }
将XML文档转换为Java bean, ReadXMLFile.java
用Java将XML文件转换为Java对象,可以使用dom4j或者sax解析方式。这里使用SAX方式解析,返回得到的数据List集合。
package com.trainning.project; import java.io.File; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class ReadXMLFile { public static List<CD> getXMLFileList(String filepath) { //创建文件对象 File file = new File(filepath); //构建SAX读写器 SAXReader saxReader = new SAXReader(); //将XML文件内容保存在List中 List<CD> cds = new ArrayList<CD>(); try { //加载文件 Document document = saxReader.read(file); //获取根元素 Element root =document.getRootElement(); //获取根元素下的所有子元素 List<Element> list = root.elements(); //将文件元素内容赋值给java bean for(Element e : list){ CD cd = new CD(); cd.setTitle(e.elementText("TITLE")); cd.setArtist(e.elementText("ARTIST")); cd.setCompany(e.elementText("COMPANY")); cd.setCountry(e.elementText("COUNTRY")); cd.setPrice(Double.parseDouble(e.elementText("PRICE"))); cd.setYear(e.elementText("YEAR")); cd.setDescription(e.elementText("DESCRIPTION")); cds.add(cd); } } catch (DocumentException e) { e.printStackTrace(); } return cds; } }
使用SolrJ将List数据导入到Solr数据库
新建一个文件SolrPublisher.javapackage com.trainning.project; 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/cd.xml"; List<CD> list = ReadXMLFile.getXMLFileList(filepath); list.stream().forEach(System.out::println); for(CD 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(); } 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找到项目的源代码。
相关文章推荐
- [置顶] 【Solr】深入浅出Solr(三)——使用Solrj向索引库中导入数据
- Solr6使用SolrJ导入JSON数据
- 疑问: Web Service 的返回数值 string的形式返回xml,怎样把数据导入到DataSet中使用?
- VC++ 下使用 xml 文件导入导出数据
- Solr 数据导入 <一>DIH简单使用
- 使用solr从mysql数据中导入数据
- 使用 Solr 创建 Core 并导入数据库数据
- JAVAWEB开发之Solr的入门——Solr的简介以及简单配置和使用、solrJ的使用、Solr数据同步插件
- 跟益达学Solr5之使用Tika从PDF中提取数据导入索引(转字:http://www.tuicool.com/articles/JfUfaey)
- solr服务快速搭建、配置中文分词、数据导入即solrj增删改查
- 跨平台图表控件TeeChart使用教程:导入XML数据
- 旗正规则管理器使用——导入xml文件数据
- java搜索引擎Apache的solr初探-安装使用导入mysql数据
- Solr 数据导入 <一>DIH简单使用
- solr6的学习与使用(四):数据导入功能
- SOLR企业搜索平台 三 (schema.xml配置和solrj的使用)
- cool-2018-03-09-linux下安装单机版solr-4.10--solr导入数据之solrj
- [Step By Step]使用SAP Business Objects Data Services将XML数据导入到SAP HANA中(XML DTD)
- Solr json,xml等文件数据导入(添加索引)linux下操作