Solr6使用SolrJ导入JSON数据

37 篇文章 0 订阅

摘要: 之前,曾讨论过如何使用SolrJ将XML文件数据导入到Solr数据库,参见http://blog.csdn.net/jiangchao858/article/details/52766017。这次,使用的数据结构是JSON,解析过程将更为简单。

需要的软件支持

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.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<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找到项目的源代码。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Solr 中,可以通过使用 Solrj 库将查询结果转换为 JSON 格式。Solrj 是 Solr 的 Java 客户端,它提供了一些方便的 API 来与 Solr 进行交互。 以下是一个使用 Solrj 将 Solr 查询结果转换为 JSON 的示例代码: ```java import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; public class SolrJsonExample { public static void main(String[] args) throws Exception { String solrUrl = "http://localhost:8983/solr/mycore"; SolrClient solr = new HttpSolrClient.Builder(solrUrl).build(); SolrQuery query = new SolrQuery("*:*"); query.setRows(10); QueryResponse response = solr.query(query); SolrDocumentList docs = response.getResults(); System.out.println(docs.toJSON()); } } ``` 在上面的示例中,我们首先创建了一个 SolrClient 对象,然后创建一个 SolrQuery 对象,并设置查询条件。接着,我们使用 SolrClient 对象执行查询,并将结果存储在一个 SolrDocumentList 对象中。最后,我们使用 SolrDocumentList 对象的 toJSON() 方法将结果转换为 JSON 格式,并将其打印到控制台上。 需要注意的是,上面的代码中使用SolrClient 对象是 HttpSolrClient 类型,它是 Solrj 提供的一种 HTTP 客户端。如果你使用的是不同的 Solr 客户端,可能需要根据不同的客户端类型来进行代码编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cj96248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值