【Solr】之使用Java连接solr完成增删改查等操作-5

简介: 【Solr】之使用Java连接solr完成增删改查等操作-5

一、准备工作


1.1 清空之前的测试数据20200714161753107.png

1.2 IDEA创建项目


20200714185925346.png


1.3 修改pom.xml加入相依赖


<properties>
    <solrj.version>7.7.2</solrj.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>${solrj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
    </dependency>
</dependencies>

1.4 创建Test01Connection测试

public class Test01Connection {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://ip:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) {
        System.out.println(httpSolrClient);
    }
}

二、增删查


2.1 添加数据

package com.wang.solr;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * @author 王一宁
 * @date 2020/7/14 16:32
 */
public class Test02AddData {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        //一个一个添加
        /*SolrInputDocument doc=new SolrInputDocument();
        doc.addField("id",1);
        doc.addField("goods_name","尚品宅配 定制衣柜 欧式移门推拉门整体大衣柜 卧室柜衣帽间 全屋家具定制 订金(非实际价格)");
        doc.addField("goods_remark","该商品购买1-100件时享受单件价¥608.00,超出数量以结算价为准,仅限购买一次");
        httpSolrClient.add(doc);
        httpSolrClient.commit();
        httpSolrClient.close();*/
        //一个集合一个集合的添加
        List<SolrInputDocument> docs=new ArrayList<>();
        for (int i = 1; i <=5; i++) {
            SolrInputDocument dox=new SolrInputDocument();
            dox.addField("id",i);
            dox.addField("goods_name","锤子手机"+i);
            dox.addField("goods_remark","坚果Pro3---"+i);
            docs.add(dox);
        }
        httpSolrClient.add(docs);
        httpSolrClient.commit();
        httpSolrClient.close();
        System.out.println("操作成功");
    }
}


2.2 指定库添加数据

20200714190426794.png

2.3 删除数据

/**
 * @author 王一宁
 * @date 2020/7/14 16:32
 */
public class Test03DeleteData {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        // 根据ID删除
        //httpSolrClient.deleteById("1");
        // 根据IDS删除
        //httpSolrClient.deleteById(Arrays.asList("1","2","3"));
        // 根据ID删除指定库的数据
        //httpSolrClient.deleteById("db1-core","1");
        // 全部删除
        httpSolrClient.deleteByQuery("*:*");
        httpSolrClient.commit();
        httpSolrClient.close();
    }
}

三、添加自定义字段并添加数据


3.1 添加修改managed-schema


<!--自定义Person的字段-->
  <field name="name" type="text_cn" indexed="true" required="true" stored="true" multiValued="false"/>
  <field name="age" type="pint" indexed="true" stored="true" multiValued="false"/>
  <field name="sex" type="text_cn" indexed="false" stored="true" multiValued="false"/>
  <field name="salary" type="pdouble" indexed="true" stored="true" multiValued="false"/>
  <field name="remark" type="text_cn" indexed="true" stored="true" multiValued="false"/>

3.2 修改后重启动solr查看

2020071419075031.png


3.3 添加数据

/**
 * @author 王一宁
 * @date 2020/7/14 16:32
 */
public class Test05AddCustData {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        //一个集合一个集合的添加
        List<SolrInputDocument> persons =new ArrayList<>(5);
        SolrInputDocument lvbu = new SolrInputDocument();
        lvbu.addField("id","1");
        lvbu.addField("name","吕布");
        lvbu.addField("age",33);
        lvbu.addField("sex","男");
        lvbu.addField("salary","8888.88");
        lvbu.addField("remark","人中吕布,马中赤兔");
        SolrInputDocument zhaoyun = new SolrInputDocument();
        zhaoyun.addField("id","2");
        zhaoyun.addField("name","赵云");
        zhaoyun.addField("age",28);
        zhaoyun.addField("sex","男");
        zhaoyun.addField("salary","8888.88");
        zhaoyun.addField("remark","七进七出");
        SolrInputDocument guanyu = new SolrInputDocument();
        guanyu.addField("id","3");
        guanyu.addField("name","关羽");
        guanyu.addField("age",44);
        guanyu.addField("sex","男");
        guanyu.addField("salary","9999.88");
        guanyu.addField("remark","忠肝义胆");
        SolrInputDocument zhangfei = new SolrInputDocument();
        zhangfei.addField("id","4");
        zhangfei.addField("name","张飞");
        zhangfei.addField("age",41);
        zhangfei.addField("sex","男");
        zhangfei.addField("salary","8888.88");
        zhangfei.addField("remark","莽夫一个");
        SolrInputDocument liubei = new SolrInputDocument();
        liubei.addField("id","5");
        liubei.addField("name","刘备");
        liubei.addField("age",48);
        liubei.addField("sex","男");
        liubei.addField("salary","99999.88");
        liubei.addField("remark","心机婊");
        persons.add(lvbu) ;
        persons.add(zhaoyun) ;
        persons.add(guanyu) ;
        persons.add(zhangfei) ;
        persons.add(liubei) ;
        httpSolrClient.add(persons);
        httpSolrClient.commit();
        httpSolrClient.close();
        System.out.println("操作成功");
    }
}

查看数据是否添加成功


20200714190922272.png


3.4 使用注解的方式添加【不推荐】


创建Person

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @Field("id")
    private Integer id;
    @Field("name")
    private String name;
    @Field("age")
    private Integer age;
    @Field("sex")
    private String sex;
    @Field("salary")
    private Double salary;
    @Field("remark")
    private String remark;
}

测试

public class Test06AddDataAnnoation {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        //一个集合一个集合的添加
        List<Person> persons = new ArrayList<>(5);
        persons.add(new Person(1,"吕布",33,"男",8888.88,"人中吕布"));
        persons.add(new Person(2,"赵云",28,"男",9888.88,"七进七出"));
        persons.add(new Person(3,"关羽",44,"男",10888.88,"忠肝义胆"));
        persons.add(new Person(4,"张飞",41,"男",11888.88,"莽夫一个"));
        persons.add(new Person(5,"刘备",48,"男",12888.88,"心机婊"));
        httpSolrClient.addBeans(persons);
        httpSolrClient.commit();
        httpSolrClient.close();
        System.out.println("操作成功");
    }
}

四、全查询


public class Test06QueryAll {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        String keywords = "*:*";
        SolrQuery solrQuery = new SolrQuery(keywords);
        QueryResponse query = httpSolrClient.query(solrQuery);
        SolrDocumentList results = query.getResults();
        System.out.println("总条数:"+results.getNumFound());
        for (SolrDocument result : results){
            System.out.println(result);
        }
        httpSolrClient.commit();
        httpSolrClient.close();
        System.out.println("操作成功");
    }
}


五、分页查询

public class Test06QueryForPage {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://47.94.39.202:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        String keywords = "*:*";
        SolrQuery solrQuery = new SolrQuery(keywords);
        int page = 1;
        int limit = 3;
        //从哪里开始查询
        solrQuery.setStart((page-1)*limit);
        //设置每页显示多少数据
        solrQuery.setRows(limit);
        QueryResponse query = httpSolrClient.query(solrQuery);
        SolrDocumentList results = query.getResults();
        System.out.println("总条数:"+results.getNumFound());
        for (SolrDocument result : results){
            System.out.println(result);
        }
        httpSolrClient.commit();
        httpSolrClient.close();
        System.out.println("操作成功");
    }
}

六、排序查询

public class Test08QuerySort {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://ips:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
       String keywords="*:*";
       //创建一个查询条件对象
        SolrQuery solrQuery=new SolrQuery(keywords);
//        solrQuery.setSort("id",SolrQuery.ORDER.desc); //只能根据一个属性进行排序
        solrQuery.setSort("age",SolrQuery.ORDER.asc);
        //查询
        QueryResponse query = httpSolrClient.query(solrQuery);
        //取出结果
        SolrDocumentList results = query.getResults();
        System.out.println("总条数:"+results.getNumFound());
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }
}

七、范围查询

public class Test10QueryRange {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="http://ip:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        //创建条件
        SolrQuery solrQuery=new SolrQuery("*:*");
        //限定范围 20-40岁之间的
        solrQuery.setFilterQueries("age:[20 TO 40]");
        QueryResponse query = httpSolrClient.query(solrQuery);
        //取出结果
        SolrDocumentList results = query.getResults();
        System.out.println("总条数:"+results.getNumFound());
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }
}

八、过滤查询

public class Test11QueryFilter {
    //声明一个连接solr的地址  ip:port/solr/库名
    public static final String SOLR_URL="ip:8983/solr/db2-core";
    //声明一个连接solr的对象
    private static HttpSolrClient httpSolrClient;
    static {
        httpSolrClient=new HttpSolrClient.Builder(SOLR_URL).build();
    }
    public static void main(String[] args) throws IOException, SolrServerException {
        //创建条件
        SolrQuery solrQuery=new SolrQuery("*:*");
        //限定条件 年龄=33
        solrQuery.setFilterQueries("age:33");
        QueryResponse query = httpSolrClient.query(solrQuery);
        //取出结果
        SolrDocumentList results = query.getResults();
        System.out.println("总条数:"+results.getNumFound());
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }
}


目录
相关文章
|
9天前
|
存储 Java 关系型数据库
高效连接之道:Java连接池原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。频繁创建和关闭连接会消耗大量资源,导致性能瓶颈。为此,Java连接池技术通过复用连接,实现高效、稳定的数据库连接管理。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接池的基本操作、配置和使用方法,以及在电商应用中的具体应用示例。
27 5
|
7天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
20 3
|
7天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
11 1
|
7天前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
22 1
|
13天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
1月前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
34 6
如何用java的虚拟线程连接数据库
|
26天前
|
SQL 存储 Java
Java中使用ClickHouseDriver连接和基本操作
通过上述步骤,你可以轻松地在Java应用中集成ClickHouse数据库,执行基本的CRUD操作。需要注意的是,实际开发中应当根据实际情况调整数据库连接配置(如URL中的主机、端口、数据库名等),并根据应用需求选择合适的异常处理策略,确保代码的健壮性和资源的有效管理。此外,对于复杂查询和大批量数据处理,建议充分利用ClickHouse的特性(如分布式处理、列式存储优化等),以进一步提升性能。
33 2
|
29天前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
25 1
|
1月前
|
Java 关系型数据库 MySQL
数据库的连接用Java
本文介绍了如何使用Java连接MySQL数据库,包括注册JDBC驱动、创建数据库连接URL、设置数据库用户和密码、建立连接以及关闭连接的完整代码示例。
22 0
数据库的连接用Java
|
2月前
|
存储 SQL 分布式计算
Java连接阿里云MaxCompute例
要使用Java连接阿里云MaxCompute数据库,首先需在项目中添加MaxCompute JDBC驱动依赖,推荐通过Maven管理。避免在代码中直接写入AccessKey,应使用环境变量或配置文件安全存储。示例代码展示了如何注册驱动、建立连接及执行SQL查询。建议使用RAM用户提升安全性,并根据需要配置时区和公网访问权限。具体步骤和注意事项请参考阿里云官方文档。