以下为solr4的java API操作

还有HttpSolrServer类,而solr7已经是没有的了,换成Solrclient

 

package com.hnu.scw.util;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.List;import java.util.Map;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrServer;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.junit.Test;import com.hnu.scw.model.ProductModel;/**
 * solrj的相关开发
 * @author hadoop
 * */public class SolrManager {
    
    @Test    
    public void addContent() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException, SolrServerException {        //设置solr服务器的路径,默认是使用第一个core
        String baseURL="http://hadoop-001:8080/solr/new_core";        //如果要使用第二个collection库,那么就使用下面的链接        //String baseURL2 = "http://hadoop-001:8080/solr/new_core2";    
        
        //创建服务器连接对象
        HttpSolrServer httpSolrServer=new HttpSolrServer(baseURL);
        SolrInputDocument solrInputDocument=new SolrInputDocument();
        ProductModel productModel=new ProductModel("3","电脑","家电",111,"这是一个电脑","2011122717522515_S.jpg");
        Field[] fields=ProductModel.class.getDeclaredFields();        for (Field field : fields) {
               String name = field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1);    //获取属性的名字
                String type = field.getGenericType().toString();    //获取属性的类型
                Method m = productModel.getClass().getMethod("get"+name);                if (type.equals("class java.lang.String")) {
                    String value = (String) m.invoke(productModel);    //调用getter方法获取属性值                    solrInputDocument.setField(field.getName(), value);
                }else {                    float value = (float) m.invoke(productModel);    //调用getter方法获取属性值                    solrInputDocument.setField(field.getName(), value);
                }       
        }         //进行添加        httpSolrServer.add(solrInputDocument);        //进行手动提交,否则无法进行添加        httpSolrServer.commit();
    
        
        
    }    
    /**
     * 进行删除文档操作
     * @throws SolrServerException
     * @throws IOException     */
    @Test    public void deleteContent() throws Exception{
        String baseURL = "http://hadoop-001:8080/solr/new_core";
        SolrServer httpSolrServer = new HttpSolrServer(baseURL);        //删除全部,第一个参数是设置需要删除的数据的域和值,第二个是执行后多久进行删除操作        //httpSolrServer.deleteByQuery("*:*",1000);        //删除某个特定域的特定值的数据
        httpSolrServer.deleteByQuery("id:3",1000);
    }    
    /**
     * 修改文档内容
     * 修改其实和添加是一样的,因为只要添加的ID是一样的,那么就会把原来的删除了,然后再添加一个
     * @throws IOException 
     * @throws SolrServerException 
     */
    @Test    public void updateContent() throws SolrServerException, IOException{
        String baseURL = "http://hadoop-001:8080/solr/new_core";
        SolrServer httpSolrServer = new HttpSolrServer(baseURL);        //创建新的文档对象
        SolrInputDocument solrInputDocument = new SolrInputDocument();        //设置文档的域
        solrInputDocument.setField("id", "haha123");
        solrInputDocument.setField("name", "哈哈123");
        httpSolrServer.add(solrInputDocument);
    }    /**
     * 查询数据(多功能的显示处理)
     * @throws Exception 
     */
    @Test    public void queryContent() throws Exception{
        String baseURL = "http://hadoop-001:8080/solr/new_core";
        SolrServer httpSolrServer = new HttpSolrServer(baseURL);        //创建查询数据对象(便于设置查询条件)
        SolrQuery solrQuery = new SolrQuery();        //设置查询的域和值,这个在之后的项目中可以用于动态        //方法一:参数q就代表query查询        //solrQuery.set("q","pname:开开123");        //方法二:(一般使用该方法)
        solrQuery.setQuery("pname:台灯");        //方法三:通过设置默认域        //solrQuery.set("df", "name");//default fields        //solrQuery.setQuery("开开");        
        //设置查询过滤条件(可以设置多个,只要域和值有改变就可以了)        //solrQuery.set("fq", "id:haha123"); //filter        //添加排序方式(可选内容)        //solrQuery.addSort("需要排序的域",ORDER.asc);//升序        //solrQuery.addSort("需要排序的域",ORDER.desc);//降序        //设置分页处理(比如这是设置每次显示5个)
        solrQuery.setStart(0);
        solrQuery.setRows(5);        //设置只查询显示指定的域和值(第二个参数可以是多个,之间用“逗号”分割)        //solrQuery.set("fl", "name");        //设置某域进行高亮显示
        solrQuery.setHighlight(true);
        solrQuery.addHighlightField("pname");        //设置高亮显示格式的前后缀
        solrQuery.setHighlightSimplePre("");
        solrQuery.setHighlightSimplePost(");    
        
        //执行查询,获得查询结果对象
        QueryResponse query = httpSolrServer.query(solrQuery);        //获取查询的结果集
        SolrDocumentList results = query.getResults();        //获取高亮显示的查询结果        //注意点:因为高亮的结果和正常的查询结果是不一样的,所以要进行特别的处理
        Map<String, Map<String, List>> highlighting = query.getHighlighting();        //遍历结果集
        for (SolrDocument solrDocument : results) {
            String idStr = (String) solrDocument.get("id");
            System.out.println("id----------------" + idStr);
            String nameStr = (String) solrDocument.get("pname");
            System.out.println("pname----------------" + nameStr);
            System.out.println("===========高亮显示=====================");
            Map<String, List> map = highlighting.get(idStr);
            Listlist = map.get("pname");
            String resultString = list.get(0);
            System.out.println("高亮结果为:-----" + resultString);
        }        

    
    }

    
    

}

 

以下为solrj4与solrj7操作solrcloud的比较

 

  SearchProductDaoImpl  List

 String defaultCollection = "new_core2";
        ListzkHosts = new ArrayList();
        zkHosts.add("192.168.137.188:2181");
        zkHosts.add("192.168.137.189:2181");
        zkHosts.add("192.168.137.190:2181");
        OptionalzkChroot = Optional.of("/");        //builder的构造函数需要一个List和一个Optional
        Builder builder = new CloudSolrClient.Builder(zkHosts, zkChroot);

          CloudSolrClient cloudSolrServer = builder
                  .withConnectionTimeout(3000)
                  .withSocketTimeout(3000)
                  .build();               
         cloudSolrServer.setDefaultCollection(defaultCollection);



         //以下为solr4操作solrcloud


                      // zkHost:zookeeper的地址列表
                     //String zkHost = "hadoop-001:2181,hadoop-003:2181,hadoop-002:2181";//不能有空格,否则找不到hadoop-002

                    // 创建一个集群的连接,应该使用CloudSolrServer创建
                   // CloudSolrServer solrServer = new CloudSolrServer(zkHost);
                   // 设置一个defaultCollection属性 

                 // collection默认名称, 比如Solr服务器上的collection是collection_shard1_replica1, 就是去掉"_shard1_replica1"的名称

              //private static String defaultCollection = "new_core8";

               // solrServer.setDefaultCollection("collection2");

             //cloudSolrServer.setZkClientTimeout(zkClientTimeout);
            //  cloudSolrServer.setZkConnectTimeout(zkConnectTimeout);
            //  cloudSo lrServer.connect();


                  / / 创建一个文档对象
                    SolrInputDocument document = new SolrInputDocument();



 


        
        
        
        
        SolrQuery solrQuery = new SolrQuery();        //设置关键字        solrQuery.setQuery(productSearch.getQueryString());        //设置默认检索域
        solrQuery.set("df", "keywords");        //设置过滤条件
        if(null != productSearch.getCatalog_name() && !"".equals(productSearch.getCatalog_name())){
            solrQuery.set("fq", "catalog_name:" + productSearch.getCatalog_name());
        }        if(null != productSearch.getPrice() && !"".equals(productSearch.getPrice())){            //0-9   50-*  对价格进行过滤
            String[] p = productSearch.getPrice().split("-");
            solrQuery.set("fq", "price:[" + p[0] + " TO " + p[1] + "]");
        }        // 价格排序
        if ("1".equals(productSearch.getSort())) {
            solrQuery.addSort("price", ORDER.desc);
        } else {
            solrQuery.addSort("price", ORDER.asc);
        }        // 分页
        solrQuery.setStart(0);
        solrQuery.setRows(16);        
        
        // 只查询指定域
        solrQuery.set("fl", "id,pname,price,picture");        // 高亮        // 打开开关
        solrQuery.setHighlight(true);        // 指定高亮域
        solrQuery.addHighlightField("pname");        // 前缀
        solrQuery.setHighlightSimplePre("");
        solrQuery.setHighlightSimplePost("");        
        //添加查询操作      //  SolrQuery query = new SolrQuery("*:*");        
        // 执行查询
        QueryResponse response = cloudSolrServer.query(solrQuery);        // 文档结果集
        SolrDocumentList docs = response.getResults();

        Map<String, Map<String, List>> highlighting = response.getHighlighting();
        
        ListproductModels = new ArrayList();        //Map<String, Map<String, List>> highlighting2 = response.getHighlighting();
        for (SolrDocument doc : docs) {
            System.out.println(doc.get("id"));
            System.out.println(doc.get("price"));
            System.out.println(doc.get("picture"));
            System.out.println(doc.get("pname"));
            
            
            ProductModel productModel = new ProductModel();
            productModel.setPid((String) doc.get("id"));
            productModel.setPrice((Float) doc.get("price"));
            productModel.setPicture((String) doc.get("picture"));
            
            
            
            
            Map<String, List> map = highlighting.get(doc.get("id"));            if (map.isEmpty()) {
                map=highlighting.get("1");
            }
            
            Listlist = map.get("pname");
            
            productModel.setPname(list.get(0));
            productModels.add(productModel);
        }        return productModels;
    }

}