solr 通过实体类创建索引注意事项

solr 他可以通过3中方式进行索引创建,如下:
1.基于Apache  Tika 的 solr cell(Solr Content Extraction Library ),来提取上传文件内容进行索引。
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 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 com.cai.solr.domain.Product;
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("");//获取索引信息
  }
  
 }
}
注意:我们使用javabean 方式我们要使用注解进行字段定义如果不用注解定义那么solr 不会把javabean与solr field 进行对应,也就不会创建索引成功,所以此点应注意。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值