solr 他可以通过3中方式进行索引创建,如下:
1.基于Apache Tika 的 solr cell(Solr Content Extraction Library ),来提取上传文件内容进行索引。
2.应用中通过Index handler(即 index API)来提交数据。
3.通过Data Import Handler 来提交结构化数据源的数据
2.应用中通过Index handler(即 index API)来提交数据。
3.通过Data Import Handler 来提交结构化数据源的数据
今天我们就通过solrJ进行索引创建,具体如下操作步骤:
1.首先我们要定义我们的schema ,定义此schema就相当于我们创建了一个外体结构,需要填充我们只需要传输数据就行,简单理解就相当于我们如果需要用到数据库存储我们的数据信息,那么我们首先创建一张表,然后才能进行DML操作。
2.定义好之后我们可以通过solrInutDocument方式进行数据填充,通过也可以通过定义javabean 的方式进行数据填充,具体雷子如下:
package com.cai.solr.client;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
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.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
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.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import com.cai.solr.domain.Product;
import com.sun.org.apache.bcel.internal.generic.LNEG;
import com.sun.org.apache.bcel.internal.generic.LNEG;
public class SolrClientDemo {
//创建基础链接
public static String baseUrl = "http://localhost:8983/solr";
//带有集合/内核的链接
public static String collBaseUrl = "http://localhost:8983/solr/mycore";
//使用httpsolrclient 这种是独立solr 服务并发量小
/**
* 带参数的方法
* @param baseurl
* @return
*/
public static HttpSolrClient getHttpSolrClient(String baseurl) {
return new HttpSolrClient.Builder(baseurl).withConnectionTimeout(1000).withSocketTimeout(1000).build();
}
public static HttpSolrClient getHttpSolrClient() {
return new HttpSolrClient.Builder(collBaseUrl).withConnectionTimeout(1000).withSocketTimeout(1000).build();
}
/**
* 创建负载均衡的客户端
* 这个对象就是在客户端不断的循环,将其链接分为2类,一个放在活动节点容器,一个在不活动节点,不活动节点会定时检测是否会复活,复活的加入到
* 复活节点
* @return
*/
public static LBHttpSolrClient getLBHttpSolrClient(String ... baseUrl) {
return new LBHttpSolrClient.Builder().withBaseSolrUrls(baseUrl).withConnectionTimeout(5000).withSocketTimeout(1000).build();
}
private static String base2Url = "http://localhost:8002/solr";
public static LBHttpSolrClient getLBHttpSolrClient() {
return new LBHttpSolrClient.Builder().withBaseSolrUrls(baseUrl,base2Url).withConnectionTimeout(5000).withSocketTimeout(1000).build();
}
/**
* 使用集群客户端创建
* @param zkHosts
* @param zkChroot
* @return
*/
public static CloudSolrClient getCloudSolrClient(List<String> zkHosts, Optional<String> zkChroot) {
return new CloudSolrClient.Builder(zkHosts, zkChroot).build();
}
public static void main(String[] args) throws Exception {
HttpSolrClient client=getHttpSolrClient();
SolrInputDocument document = new SolrInputDocument();
Product product = new Product();
product.setId(UUID.randomUUID().toString());
product.setId("通过实体类加入数据");
client.addBean(product);
client.commit();
client.close();
/*document.addField("id",UUID.randomUUID());
document.addField("test_name","电脑0");
client.add("mycore",document);
client.commit("mycore");
client.close();*/
//getSolrSearch();
}
/**
* 通过索引查询数据
* @throws Exception
* @throws SolrServerException
*/
public static void getSolrSearch() throws SolrServerException, Exception {
//创建索引客户端
SolrClient httpSolrClient = SolrClientDemo.getHttpSolrClient();
//创建solr查询字段索引
Map<String,String> map = new HashMap<String, String>();
map.put("test_name", "电脑");
SolrParams params = new MapSolrParams(map);
QueryResponse queryResponse= httpSolrClient.query(params);
System.err.println(queryResponse.getResponse()
+queryResponse.getRequestUrl()+"**"+queryResponse.getExplainMap()
);
//获取document
SolrDocumentList documentLs = queryResponse.getResults();
for(SolrDocument solrDocument : documentLs){
solrDocument.get("");//获取索引信息
}
}
//创建基础链接
public static String baseUrl = "http://localhost:8983/solr";
//带有集合/内核的链接
public static String collBaseUrl = "http://localhost:8983/solr/mycore";
//使用httpsolrclient 这种是独立solr 服务并发量小
/**
* 带参数的方法
* @param baseurl
* @return
*/
public static HttpSolrClient getHttpSolrClient(String baseurl) {
return new HttpSolrClient.Builder(baseurl).withConnectionTimeout(1000).withSocketTimeout(1000).build();
}
public static HttpSolrClient getHttpSolrClient() {
return new HttpSolrClient.Builder(collBaseUrl).withConnectionTimeout(1000).withSocketTimeout(1000).build();
}
/**
* 创建负载均衡的客户端
* 这个对象就是在客户端不断的循环,将其链接分为2类,一个放在活动节点容器,一个在不活动节点,不活动节点会定时检测是否会复活,复活的加入到
* 复活节点
* @return
*/
public static LBHttpSolrClient getLBHttpSolrClient(String ... baseUrl) {
return new LBHttpSolrClient.Builder().withBaseSolrUrls(baseUrl).withConnectionTimeout(5000).withSocketTimeout(1000).build();
}
private static String base2Url = "http://localhost:8002/solr";
public static LBHttpSolrClient getLBHttpSolrClient() {
return new LBHttpSolrClient.Builder().withBaseSolrUrls(baseUrl,base2Url).withConnectionTimeout(5000).withSocketTimeout(1000).build();
}
/**
* 使用集群客户端创建
* @param zkHosts
* @param zkChroot
* @return
*/
public static CloudSolrClient getCloudSolrClient(List<String> zkHosts, Optional<String> zkChroot) {
return new CloudSolrClient.Builder(zkHosts, zkChroot).build();
}
public static void main(String[] args) throws Exception {
HttpSolrClient client=getHttpSolrClient();
SolrInputDocument document = new SolrInputDocument();
Product product = new Product();
product.setId(UUID.randomUUID().toString());
product.setId("通过实体类加入数据");
client.addBean(product);
client.commit();
client.close();
/*document.addField("id",UUID.randomUUID());
document.addField("test_name","电脑0");
client.add("mycore",document);
client.commit("mycore");
client.close();*/
//getSolrSearch();
}
/**
* 通过索引查询数据
* @throws Exception
* @throws SolrServerException
*/
public static void getSolrSearch() throws SolrServerException, Exception {
//创建索引客户端
SolrClient httpSolrClient = SolrClientDemo.getHttpSolrClient();
//创建solr查询字段索引
Map<String,String> map = new HashMap<String, String>();
map.put("test_name", "电脑");
SolrParams params = new MapSolrParams(map);
QueryResponse queryResponse= httpSolrClient.query(params);
System.err.println(queryResponse.getResponse()
+queryResponse.getRequestUrl()+"**"+queryResponse.getExplainMap()
);
//获取document
SolrDocumentList documentLs = queryResponse.getResults();
for(SolrDocument solrDocument : documentLs){
solrDocument.get("");//获取索引信息
}
}
}
注意:我们使用javabean 方式我们要使用注解进行字段定义如果不用注解定义那么solr 不会把javabean与solr field 进行对应,也就不会创建索引成功,所以此点应注意。