Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> solr6使用solrJ做XML數據導入

solr6使用solrJ做XML數據導入

編輯:關於Android編程

摘要: 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找到項目的源代碼。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved