博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr搜索引擎第八篇-索引提交方式
阅读量:4163 次
发布时间:2019-05-26

本文共 7134 字,大约阅读时间需要 23 分钟。

文章目录

通过WEB控制台提交

登陆web控制台,从这里可以提交索引数据,支持JSON、CSV、XML、上传文件、Solr Command的方式提交索引

在这里插入图片描述
具体提交的数据格式以及携带参数可以参看官方文档:

使用POST工具提交

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

Java客户端使用SorlJ

Java客户端应用可以使用solrj这个工具包,提交索引并查询索引。

pom.xml文件引入solrj:

org.apache.solr
solr-solrj
7.3.0

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
* 负载均衡方式: 轮询给定的多个solr server url。 * 当某个url不通时,url地址会从活跃列表移到死亡列表中,用下一个地址再次发送请求。
* 对于死亡列表中的url地址,会定期(默认每隔1分钟,可设置)去检测是否变活了,再加入到活跃列表中。
* 注意:
* 1、不可用于主从结构master/slave的索引场景,因为主从结构必须通过主节点来更新。
* 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
* CloudSolrClient 实例通过访问zookeeper得到集群中集合的节点列表,
* 然后通过LBHttpSolrClient来负载均衡地发送请求。
* 注意:这个类默认文档的唯一键字段为“id”,如果不是的,通过 setIdField(String)方法指定。 */ public static SolrClient getCloudSolrClient(List
zkHosts, Optional
zkChroot) {
return new CloudSolrClient.Builder(zkHosts, zkChroot).build(); } public static SolrClient getCloudSolrClient() {
//zk地址,可以多个(zk集群情况下) List
zkHosts = new ArrayList
(); zkHosts.add(zkServerUrl); //zk的根目录若有变更,则需要设置,否则直接放空(一般zk主目录不会变更) Optional
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 {
@Field private String id; @Field private String name; @Field private 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
products = queryResponse.getBeans(SolrProductEntity.class); System.out.println(products.toString()); }}

结构化数据导入DIH

Solr支持结构化的数据导入,通过使用DIH。支持全量、增量数据导入。

Solr支持从关系数据库、基于http的数据源(如RSS和ATOM提要)、电子邮件存储库和结构化XML 中索引内容。
这一部分内容将会通过实际例子进行说明,请跳转

转载地址:http://vgsxi.baihongyu.com/

你可能感兴趣的文章
Joint Tracking and Segmentation of Multiple Targets
查看>>
Subgraph Decomposition for Multi-Target Tracking
查看>>
JOTS: Joint Online Tracking and Segmentation
查看>>
CDT: Cooperative Detection and Tracking for Tracing Multiple Objects in Video Sequences
查看>>
Improving Multi-frame Data Association with Sparse Representations for Robust Near-online Multi-ob
查看>>
Virtual Worlds as Proxy for Multi-Object Tracking Analysis
查看>>
Multi-view People Tracking via Hierarchical Trajectory Composition
查看>>
Online Multi-Object Tracking via Structural Constraint Event Aggregation
查看>>
The Solution Path Algotithm for Identity-Aware Multi-Object Tracking
查看>>
Groupwise Tracking of Crowded Similar-Appearance Targets from Low-Continuity Image Sequences
查看>>
CDTS: Collaborative Detection, Tracking, and Segmentation for Online Multiple Object Segmentation
查看>>
Deep Network Flow for Multi-Object Tracking
查看>>
Multiple People Tracking by Lifted Multicut and Person Re-identification
查看>>
Multi-Object Tracking with Quadruplet Convolutional Neural Networks
查看>>
关于多目标跟踪的一点理解
查看>>
Learning by tracking:Siamese CNN for robust target association
查看>>
MUSTer:Multi-Store Tracker:A Cognitive Psychology Inspired Approach to Object Tracking
查看>>
Understanding and Diagnosing Visual Tracking Systems
查看>>
Multiple People Tracking by Lifted Multicut and Person Re-identification
查看>>
Visual Tracking Using Attention-Modulated Disintegration and Integration
查看>>