Solr搜索引擎第八篇-索引提交方式

2024-02-25 08:08

本文主要是介绍Solr搜索引擎第八篇-索引提交方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 通过WEB控制台提交
  • 使用POST工具提交
  • Java客户端使用SorlJ
  • 结构化数据导入DIH

通过WEB控制台提交

登陆web控制台,从这里可以提交索引数据,支持JSON、CSV、XML、上传文件、Solr Command的方式提交索引
在这里插入图片描述
具体提交的数据格式以及携带参数可以参看官方文档:
https://lucene.apache.org/solr/guide/7_5/uploading-data-with-index-handlers.html

使用POST工具提交

其实和使用web控制台提交是一样的,服务端提供了http接口,无非就是调用这个http接口罢了,至于客户端使用什么工具都是可以的。在web控制台中没有具体说明提交数据的格式,在这里会一一说明。

Java客户端使用SorlJ

Java客户端应用可以使用solrj这个工具包,提交索引并查询索引。
pom.xml文件引入solrj:

<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>7.3.0</version>
</dependency>

solrj底层使用httpclient连接solr服务器实例的。核心的API有SolrClient、SolrRequest、SolrResponse。
SolrClient的子类有如下,需要看情况使用对应的子类:

  • HttpSolrClient – 与指定的一个solr节点通信的客户端,适用于单机模式
  • LBHttpSolrClient –负载均衡地访问一组节点的客户端,适用于SolrCloud模式
  • CloudSolrClient – 访问solrCloud的客户端,适用于SolrCloud模式,常用
  • ConcurrentUpdateSolrClient –并发更新索引用的客户端

SolrClient提供了很多方法,包括增删改查。具体的SolrClient、SolrRequest、SolrResponse提供了哪些方法,可以直接查看代码。
如下一个简单的示例:

package com.dalomao.framework.solr;import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.LBHttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;/*** solr各种客户端demo* 要想跑通该demo,必须启动solr实例,且创建内核mycore* 实际开发的时候,client客户端设为单例*/
public class SolrJClientDemo {// baseSolrUr 示例private static String baseSolrUrl = "http://localhost:8983/solr/";private static String baseSolrUrl2 = "http://localhost:7001/solr/";//指定集合/内核的URL地址private static String baseSolrUrlWithCollection = "http://localhost:8983/solr/mycore";//zk地址,适用于SolrCloud模式private static String zkServerUrl = "localhost:9983";/*** HttpSolrClient:与一个solr Server 通过http进行通信* 适用于独立服务器模式(单机)*/public static SolrClient getHttpSolrClient(String baseSolrUrl) {return new HttpSolrClient.Builder(baseSolrUrl).withConnectionTimeout(1000).withSocketTimeout(6000).build();}public static SolrClient getHttpSolrClient() {return new HttpSolrClient.Builder(baseSolrUrl).withConnectionTimeout(1000).withSocketTimeout(6000).build();}/*** LBHttpSolrClient: 负载均衡的httpSolrClient <br>* 负载均衡方式: 轮询给定的多个solr server url。* 当某个url不通时,url地址会从活跃列表移到死亡列表中,用下一个地址再次发送请求。<br>* 对于死亡列表中的url地址,会定期(默认每隔1分钟,可设置)去检测是否变活了,再加入到活跃列表中。 <br>* 注意: <br>* 1、不可用于主从结构master/slave的索引场景,因为主从结构必须通过主节点来更新。 <br>* 2、适用于SolrCloud模式,在solrCloud中可用它来进行索引更新,solrCloud中的节点会将请求转发到对应的leader。* 3、对于SolrCloud(leader/replica),使用CloudSolrClient更好。*/public static SolrClient getLBHttpSolrClient(String... solrUrls) {return new LBHttpSolrClient.Builder().withBaseSolrUrls(solrUrls).build();}public static SolrClient getLBHttpSolrClient() {return new LBHttpSolrClient.Builder().withBaseSolrUrls(baseSolrUrl, baseSolrUrl2).build();}/*** 访问SolrCloud集群用CloudSolrClient<br>* CloudSolrClient 实例通过访问zookeeper得到集群中集合的节点列表,<br>* 然后通过LBHttpSolrClient来负载均衡地发送请求。<br>* 注意:这个类默认文档的唯一键字段为“id”,如果不是的,通过 setIdField(String)方法指定。*/public static SolrClient getCloudSolrClient(List<String> zkHosts,Optional<String> zkChroot) {return new CloudSolrClient.Builder(zkHosts, zkChroot).build();}public static SolrClient getCloudSolrClient() {//zk地址,可以多个(zk集群情况下)List<String> zkHosts = new ArrayList<String>();zkHosts.add(zkServerUrl);//zk的根目录若有变更,则需要设置,否则直接放空(一般zk主目录不会变更)Optional<String> zkChroot = Optional.empty();return new CloudSolrClient.Builder(zkHosts, zkChroot).build();}public static void main(String[] args) throws Exception {// HttpSolrClient 示例:SolrClient client = SolrJClientDemo.getHttpSolrClient();SolrInputDocument doc = new SolrInputDocument();doc.addField("id", UUID.randomUUID().toString());doc.addField("name", "HttpSolrClient");UpdateResponse updateResponse = client.add("mycore", doc);// 记得要提交client.commit("mycore");System.out.println("------------ HttpSolrClient ------------");System.out.println("add doc:" + doc);System.out.println("response: " + updateResponse.getResponse());client.close();// LBHttpSolrClient 示例client = SolrJClientDemo.getLBHttpSolrClient();doc.clear();doc.addField("id", UUID.randomUUID().toString());doc.addField("name", "LBHttpSolrClient");updateResponse = client.add("mycore", doc);// 记得要提交client.commit("mycore");System.out.println("------------ LBHttpSolrClient ------------");System.out.println("add doc:" + doc);System.out.println("response: " + updateResponse.getResponse());client.close();// CloudSolrClient 示例client = SolrJClientDemo.getCloudSolrClient();doc.clear();doc.addField("id", UUID.randomUUID().toString());doc.addField("name", "CloudSolrClient");updateResponse = client.add("mycore", doc);// 记得要提交client.commit("mycore");System.out.println("------------ CloudSolrClient ------------");System.out.println("add doc:" + doc);System.out.println("response: " + updateResponse.getResponse());client.close();}}

Solr还提供了java bean和对象映射的功能,类似mybatis中的ORM。
定义一个java bean:

package com.dalomao.framework.solr.entity;import org.apache.solr.client.solrj.beans.Field;public class SolrProductEntity {@Fieldprivate String id;@Fieldprivate  String name;@Fieldprivate String type;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 getType() {return type;}public void setType(String type) {this.type = type;}
}

定义一个测试类:

package com.dalomao.framework.solr;import com.dalomao.framework.solr.entity.SolrProductEntity;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;import java.io.IOException;
import java.util.List;
import java.util.Random;/*** 通过java bean的方式索引和查询* 实际开发的时候,client客户端设为单例*/
public class SolrClientByJavaBeanDemo {public static void main(String[] args) throws IOException, SolrServerException {//先索引数据SolrClient client = SolrJClientDemo.getHttpSolrClient("http://localhost:7001/solr");SolrProductEntity entity = new SolrProductEntity();entity.setId(new Random().toString());entity.setName("笔记本电脑");entity.setType("计算机");UpdateResponse response = client.addBean("mycore", entity);System.out.println(response.toString());client.commit("mycore");//查询SolrQuery query = new SolrQuery("*:*");query.addField("id");query.addField("name");query.setSort("id", SolrQuery.ORDER.asc);QueryResponse queryResponse = client.query("mycore", query);final List<SolrProductEntity> products = queryResponse.getBeans(SolrProductEntity.class);System.out.println(products.toString());}
}

结构化数据导入DIH

Solr支持结构化的数据导入,通过使用DIH。支持全量、增量数据导入。
Solr支持从关系数据库、基于http的数据源(如RSS和ATOM提要)、电子邮件存储库和结构化XML 中索引内容。
这一部分内容将会通过实际例子进行说明,请跳转Solr搜索引擎第九篇-DataImportHadler导入MySQL数据超详细

这篇关于Solr搜索引擎第八篇-索引提交方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744875

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my