Java使用SolrJ操作Solr

一、新建Maven项目,配置POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>
  <artifactId>solr2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>solr2</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>7.3.1</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils-core</artifactId>
        <version>1.8.3</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
  </dependencies>
</project>

二、新增文件到Solr

package com.test.solr2;

import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;

public class AddFile {
    private HttpSolrClient client = null;
    public AddFile()
    {
        String url = "http://localhost:8984/solr/new_core";
        client = new HttpSolrClient.Builder(url).build();
    }

    //第一个方法添加数据
    //使用Field向文档中添加数据
    public void add() throws Exception {
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "001");
        doc.addField("name", "古方红糖 月子经期红糖块180g*2升级套装");
        doc.addField("image", "https://img13.360buyimg.com/n5/jfs/t20920/173/1142147683/248224/59ccbdcd/5b20d81aN0ed918b5.jpg");
        doc.addField("url", "https://item.jd.com/1714158.html");
        doc.addField("content", "【618大促价59元,领券再享8.8折,买5送1原品!18日0点开抢,敬请期待!】更多活动商品请点击");
        System.out.println("================="+doc);
        client.add(doc);
        UpdateResponse up = client.commit();
    }

    //第二个方法通过对象添加数据
    //使用Field向文档中添加数据
    public void addBean() throws Exception {
        ProductInfo pi = new ProductInfo();
        pi.setId("002");
        pi.setName("古方红糖 月子经期红糖块180g*2升级套装");
        pi.setImage("https://img13.360buyimg.com/n5/jfs/t20920/173/1142147683/248224/59ccbdcd/5b20d81aN0ed918b5.jpg");
        pi.setUrl("https://item.jd.com/1714158.html");
        pi.setContent("【618大促价59元,领券再享8.8折,买5送1原品!18日0点开抢,敬请期待!】更多活动商品请点击");
        client.addBean(pi);
        UpdateResponse up = client.commit();
    }

    public static void main(String[] args) {
        try
        {
            AddFile af = new AddFile();
            //af.add();
            af.addBean();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }

}

运行后,通过控制台查询
这里写图片描述

查看一下后台自动生成的Field列表
这里写图片描述

三、通过类添加Solr数据
新建ProductInfo类

package com.test.solr2;

import java.io.Serializable;
import java.util.Date;

import org.apache.solr.client.solrj.beans.Field;

public class ProductInfo implements Serializable{
    @Field
    private String id = null;
    @Field("name")
    private String name = null;
    @Field("image")
    private String image = null;
    @Field
    private String url = null;
    @Field
    private String content = null;

    public ProductInfo(){}
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

通过HttpSolrClient.addBean添加数据
这里写图片描述

查询结果
这里写图片描述

四、查询数据

这里写图片描述

查询结果
这里写图片描述

五、查询结果返回对象类型
以对象形式返回结果集,需要对数据进行一次转化,使用SolrUtil类完成转化。
向Solr7.3.1中添加数据,默认属性都设置为多值的,数据以[]包括起来,查询返回时需要将[]取掉
这里写图片描述

SolrUtil类定义

package com.test.solr2;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class SolrUtil {
    public static final <T> List<T> getBeans(Class<T> clazz, 
            SolrDocumentList solrDocumentList) throws Exception{
        List<T> list = new ArrayList<T>();
        T t = null;
        for (SolrDocument solrDocument : solrDocumentList)
        {
            //反射出实例
            t = clazz.newInstance();
            //获取所有属性
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields)
            {
                Object val = solrDocument.get(field.getName());
                if(val != null)
                {
                    String val2 = val.toString();
                    if(val2.startsWith("[") && val2.endsWith("]"))
                        val2 = val2.substring(1,val2.length()-1);
                    System.out.println(field.getName()+","+val2);
                    BeanUtils.setProperty(t, field.getName(), val2);
                }
            }
            list.add(t);
        }
        return list;

    }

    public static final <T> T getBean(Class<T> clazz, 
            SolrDocument solrDocument) throws Exception {
        //反射出实例
        T t = clazz.newInstance();
        //获取所有属性
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            // 如果注解为默认的 采用此属性的name来从solr中获取值
            BeanUtils.setProperty(t, field.getName(), solrDocument.get(field.getName()));

        }
        return t;
    }
}

六、查询高亮显示
这里写图片描述

七、删除文档

这里写图片描述

八、更新文档数据

这里写图片描述
更新之前数据
这里写图片描述
修改后数据
这里写图片描述

代码下载
https://pan.baidu.com/s/1ckiZ1P10wsKyvZZWpOUHww

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值