首页 > 程序开发 > 移动开发 > Android >

solr6使用solrJ做XML数据导入

2016-10-10

摘要: Solr6 0的solrJ接口有部分变化,我将使用SolrJ的API,把一段XML文档数据插入到Solr数据库中。 需要的软件支持 JDK1 8以上 Solr6 0 Eclipse 4 5 solr-solrj-6 0 0 jar dom4j-1 6 1 jar XML文档

摘要: Solr6.0的solrJ接口有部分变化,我将使用SolrJ的API,把一段XML文档数据插入到Solr数据库中。

需要的软件支持

JDK1.8以上 Solr6.0 Eclipse 4.5 solr-solrj-6.0.0.jar dom4j-1.6.1.jar

XML文档转换为Java对象

我准备了一段XML数据,保存在cd.xml文档中。


    
    鲍勃·迪伦
    美国
    哥伦比亚
    10.90
    1985
    夏天的午后听Bob Dylan的歌特别容易被催眠
    
    
    邦尼泰勒
    英国
    哥伦比亚广播公司
    9.90
    1988
    对未来,永远抱著乐观与喜悦的态度
    
    
    桃莉·巴顿
    美国
    美国无线电公司
    9.90
    1982
    美国历史上最畅销的录音室唱片
    
    
    盖瑞摩尔
    英国
    维京唱片
    10.20
    1990
    在听到他们的现场之后,会爱上这些老男人的声音
    
    
    艾罗斯雷玛若提
    欧盟
    贝塔斯曼音乐集团
    9.90
    1997
    这张专辑以希腊神话中的人物为音乐背景,突显了希腊作为一个文明古国所拥有的很深厚的文化积淀
    
    
    比吉斯乐队
    英国
    环球唱片
    10.90
    1998
    青春活力十足,主唱声线可塑性强
    
    
    罗德·斯图尔特
    英国
    匹克威克
    8.50
    1990
    作者是最有才华的词曲作者之一,是二十世纪六十年代中期的英国入侵浪潮之后的标志性人物之一。
    
    
    安德烈·波伽利
    欧盟
    环球唱片
    10.80
    1996
    独一无二的声音的力量、那令人难以抗拒的温暖的感觉,这使得语言和文化都不再是阻挡交流的障碍。
    
    
    普西·斯乐巨
    美国
    大西洋
    8.70
    1987
    他无法假装若无其事,他会用全世界来交换,只为了他找到的好东西.即使她很坏,他也看不见,她不会有错,他会背弃他最要好
    
    
    肯尼·罗杰斯
    英国
    Mucik Master
    8.70
    1995
    这哥们的歌都是自觉自发热爱自己一亩三分地的城市贫民心声,毫无怨言。永远欢乐,永远飞的大。
    
    
    威尔·史密斯
    美国
    哥伦比亚
    9.90
    1997
    这个还真纽约那种感觉,特派对,流说。而且阵容强大,真正的全能明星。
    

首先需要读文件,将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 getXMLFileList(String filepath) {
        //创建文件对象
        File file = new File(filepath);
        //构建SAX读写器
        SAXReader saxReader = new SAXReader();
        //将XML文件内容保存在List中
        List cds = new ArrayList();
        try {
            //加载文件
            Document document = saxReader.read(file);
            //获取根元素
            Element root =document.getRootElement();
            //获取根元素下的所有子元素
            List 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.java
package 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 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:
            //这个参数采用通配符的方式,指定一个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=* : *
select

最后,你可以在这里https://github.com/cj96248/solr找到项目的源代码。

相关文章
最新文章
热点推荐