solr常用api

      package com.tongzhi.solr;

import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
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.Before;
import org.junit.Test;

import com.tongzhi.vo.SolrItem;

/**
 * solr的添加修改
 * @author shan
 *
 */
public class SolrTest {
    private HttpSolrServer httpSolrServer;
    
    @Before
    public void setUp(){
        // 初始化httpSolrServer;参数为solr的访问地址
        httpSolrServer = new HttpSolrServer("http://localhost:8080/solr");
    }
    
    /**
     * 查询索引方式一
     * @throws Exception 
     */
    @Test
    public void testSearch1() throws Exception{
        //创建查询对象
        SolrQuery solrQuery = new SolrQuery();
        //搜索标题中包含手机并且状态为1的文档
        solrQuery.setQuery("title:手机 AND status:1");
        //设置过滤条件,在上面的过滤条件之后再加下面的条件
        //返回的数据价格在300000-800000(不包含800000)
        solrQuery.setFilterQueries("price:[300000 TO 800000]");
        
        //设置排序,根据价格降序排序
        solrQuery.setSort("price", ORDER.desc);
        
        //设置分页
        solrQuery.setStart(0);    //设置起始索引号
        solrQuery.setRows(10);    //页大小
        
        //设置高亮
        solrQuery.setHighlight(true);
        solrQuery.addHighlightField("title");    //添加需要高亮显示的域
        solrQuery.setHighlightSimplePre("<em>");    //高亮前缀标签
        solrQuery.setHighlightSimplePost("</em>");    //高亮后缀标签]
        
        //查询
        QueryResponse response = httpSolrServer.query(solrQuery);
        
        //获取总记录数
        long total = response.getResults().getNumFound();
        
        System.out.println("本次查询到的总记录数为:" + total);
        
        //获取结果列表
        List<SolrItem> list = response.getBeans(SolrItem.class);
        
        //处理高亮标题
        if (list != null) {
            //获得高亮数据
            Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
            //遍历所有数据
            for (SolrItem item : list) {
                System.out.println("-------------------------------------");
                System.out.println("id = " + item.getId());
                System.out.println("原标题title = " + item.getTitle());
                System.out.println("高亮标题title = " + highlighting.get(item.getId().toString()).get("title").get(0));
                System.out.println("price = " + item.getPrice());
                System.out.println("image = " + item.getImage());
                System.out.println("sellPoint = " + item.getSellPoint());
                //因为在schema.xml时没有设置该域是存储的所以为null,但是设置了要索引,所以可以进行搜索
                System.out.println("status = " + item.getStatus());
            }
        }
    }
    
    /**
     * 查询索引方式二
     * @throws Exception 
     */
    @Test
    public void testSearch2() throws Exception{
        //创建查询对象
        SolrQuery solrQuery = new SolrQuery();
        //搜索标题中包含手机并且状态为1的文档
        solrQuery.setQuery("title:手机 AND status:1");
        //设置过滤条件,在上面的过滤条件之后再加下面的条件
        //返回的数据价格在300000-800000(不包含800000)
        solrQuery.setFilterQueries("price:[300000 TO 800000]");
        
        //设置排序,根据价格降序排序
        solrQuery.setSort("price", ORDER.desc);
        
        //设置分页
        solrQuery.setStart(0);    //设置起始索引号
        solrQuery.setRows(10);    //页大小
        
        //设置高亮
        solrQuery.setHighlight(true);
        solrQuery.addHighlightField("title");    //添加需要高亮显示的域
        solrQuery.setHighlightSimplePre("<em>");    //高亮前缀标签
        solrQuery.setHighlightSimplePost("</em>");    //高亮后缀标签]
        
        //查询
        QueryResponse response = httpSolrServer.query(solrQuery);
        
        //获取总记录数
        long total = response.getResults().getNumFound();
        
        System.out.println("本次查询到的总记录数为:" + total);
        
        //获取结果列表
        SolrDocumentList results = response.getResults();
        
        //处理高亮标题
        if (results != null) {
            //获得高亮数据
            Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
            //遍历所有数据
            for (SolrDocument solrDocument : results) {
                System.out.println("-------------------------------------");
                System.out.println("id = " + solrDocument.get("id"));
                System.out.println("原标题title = " + solrDocument.get("title"));
                System.out.println("高亮标题title = " + highlighting.get(solrDocument.get("id").toString()).get("title").get(0));
                System.out.println("price = " + solrDocument.get("price"));
                System.out.println("image = " + solrDocument.get("image"));
                System.out.println("sellPoint = " + solrDocument.get("sellPoint"));
                //因为在schema.xml时没有设置该域是存储的所以为null,但是设置了要索引,所以可以进行搜索
                System.out.println("status = " + solrDocument.get("status"));
            }
        }
    }
    
    
    /**
     * 添加方式一:SolrInputDocument
     * 
     * @throws Exception
     */
    @Test
    public void testAddDocument() throws Exception{
        // 创建SolrInputDocument对象,通过它来添加一个个的域
        SolrInputDocument solrInputDocument = new SolrInputDocument();
        // 参数1:域的名称,域的名称必须是在schema.xml中定义的;
        // 参数2:域的值
        // 注意:id的域不能少
        solrInputDocument.addField("id", 123L);
        solrInputDocument.addField("title", "通过代码添加--solrInputDocument方式");
        solrInputDocument.addField("price", 2000L);
        solrInputDocument.addField("sellPoint", "我会Java编程");
        solrInputDocument.addField("image", "http://image.taotao.com/jd/b43e6da16b414d7eb372863f502034b1.jpg");
        solrInputDocument.addField("status", 1);
        // 将文档添加到索引库索引化
        httpSolrServer.add(solrInputDocument);
        // 提交,在更新solr后要记得提交
        httpSolrServer.commit();    
    }
    
    /**
     * 方式一:Bean
     * 
     * @throws Exception
     */
    @Test
    public void testAddBean() throws Exception{
        //创建提交的对象
        SolrItem solrItem = new SolrItem();
        solrItem.setId(124L);
        solrItem.setTitle("通过代码添加--bean方式");
        solrItem.setImage("http://image.taotao.com/jd/b43e6da16b414d7eb372863f502034b1.jpg");
        solrItem.setPrice(2000L);
        solrItem.setSellPoint("我会Java编程");
        solrItem.setStatus(1);
        
        // 将文档添加到索引库索引化
        httpSolrServer.addBean(solrItem);
        // 提交,在更新solr后要记得提交
        httpSolrServer.commit();    
    }
    
    /**
     * 根据ID删除索引文档
     * @throws Exception 
     */
    @Test
    public void testDeleteById() throws Exception{
        // 指定要删除的文档id域对应的值
        httpSolrServer.deleteById("123");
        //提交删除
        httpSolrServer.commit();
    }
    
    /**
     * 根据条件删除索引文档
     * 删除所有
     * @throws Exception 
     */
    @Test
    public void testDeleteByQuery() throws Exception{
        // 根据条件删除索引文档
        httpSolrServer.deleteByQuery("title:代码");
        
        //删除所有的索引文档
        //httpSolrServer.deleteByQuery("*:*");
        
        //提交删除
        httpSolrServer.commit();
    }
    
}
      =================================================================
      SolrParams solrParams=new SolrQuery("(id:2 OR id:3) AND (id:3 OR id:4)");
      
package cn.flyflyyun.Solrj;

import org.apache.solr.client.solrj.SolrQuery;
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.params.SolrParams;
import org.junit.Test;

import java.util.List;
import java.util.Map;

/**
 * 查询索引
 */

public class SolrJQuery {

    /**
     * 通过遍历document
     * @throws SolrServerException
     */
    @Test
    public void queryIndex() throws SolrServerException {
        //1.连接Solr服务器
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");

        //2.初始化查询对象(设置查询条件)
        SolrParams params = new SolrQuery("*:*");

        //3.执行查询,并获得查询结果集
        QueryResponse query = solrServer.query(params);
        SolrDocumentList documentList = query.getResults();

        System.out.println("共查询到"+documentList.getNumFound()+"条结果");

        //4.获得查询字段
        for (SolrDocument document : documentList) {
            System.out.println("id:"+document.getFieldValue("id"));
            System.out.println("title"+document.getFieldValue("title"));
        }
    }

    /**
     * 返回Bean
     * @throws SolrServerException
     */
    @Test
    public void testBeanQuery() throws SolrServerException {
        //1.连接Solr服务器
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");

        //2.初始化查询对象(设置查询条件)
        //SolrParams params  = new SolrJQuery("*:*");  //查询所有
       //SolrParams params = new SolrQuery("id:5 OR id:6");  //布尔查询 OR

        //查询Id不是5的数据,布尔查询 NOT
        //SolrParams params = new SolrQuery("NOT id:5");

        //查询id为5且title为"迷惘开头的索引",布尔查询 and
        //SolrParams params = new SolrQuery("id:5 and title:迷惘*");


        //相似度查询,最大修改次为2
        //SolrParams params = new SolrQuery("title:挪威的天空~2");

        //范围查询(TO区分大小写,必须写大写)
        SolrParams params = new SolrQuery("title:华夏 OR id:[4 TO 7]");

        //3.执行查询,并获得查询结果集
        QueryResponse query = solrServer.query(params);
        
        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)
        List<Item> list = query.getBeans(Item.class);

        System.out.println("共查询到"+query.getResults().getNumFound()+"条结果");

        //4.获得查询字段(遍历List集合)
        for (Item item : list) {
            System.out.println("id"+item.getId());
            System.out.println("title"+item.getTitle());
        }
    }


    /**
     * 排序查询
     * @throws SolrServerException
     */
    @Test
    public void testSortQuery() throws SolrServerException {
        //1.连接Solr服务器
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");

        //范围查询(TO区分大小写,必须写大写)
        SolrQuery query = new SolrQuery("id:[4 TO 7]");

        //设置排序
        query.setSort("id", SolrQuery.ORDER.desc);

        //3.执行查询,并获得查询结果集
        QueryResponse response = solrServer.query(query);

        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)
        List<Item> list = response.getBeans(Item.class);

        System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");

        //4.获得查询字段(遍历List集合)
        for (Item item : list) {
            System.out.println("id"+item.getId());
            System.out.println("title"+item.getTitle());
        }
    }


    /**
     * 分页查询
     * @throws SolrServerException
     */
    @Test
    public void testPageQuery() throws SolrServerException {

        //准备分页参数
        int pageNum=2;  //页码
        int pageSize=2; //每页显示多少条数据

        //1.连接Solr服务器
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");

        //范围查询(TO区分大小写,必须写大写)
        SolrQuery query = new SolrQuery("id:[4 TO 7]");

        //设置排序
        query.setSort("id", SolrQuery.ORDER.desc);

        //设置分页
        query.setStart((pageNum-1)*pageSize);  //从哪个索引开始查询
        query.setRows(pageSize);  //每页多少数据

        //3.执行查询,并获得查询结果集
        QueryResponse response = solrServer.query(query);

        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)
        List<Item> list = response.getBeans(Item.class);

        System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");

        //4.获得查询字段(遍历List集合)
        for (Item item : list) {
            System.out.println("id"+item.getId());
            System.out.println("title"+item.getTitle());
        }
    }


    /**
     * 高亮显示
     * @throws SolrServerException
     */
    @Test
    public void testHighLightingQuery() throws SolrServerException {

        //1.连接Solr服务器
        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");

        //范围查询(TO区分大小写,必须写大写)
        SolrQuery query = new SolrQuery("title:挪威");

        //设置排序
        query.setSort("id", SolrQuery.ORDER.desc);

        //设置高亮
        //设置前置标签
        query.setHighlightSimplePre("<em>");

        //设置后置标签
        query.setHighlightSimplePost("</em>");

        //设置高亮字段
        query.addHighlightField("title");
        query.addHighlightField("id");

        //3.执行查询,并获得查询结果集
        QueryResponse response = solrServer.query(query);

        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)
        List<Item> list = response.getBeans(Item.class);

        //返回高亮的结果集(id(key):field(value))
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        
        System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");

        //4.获得查询字段(遍历List集合)
        for (Item item : list) {
            System.out.println("id:"+item.getId());
            //System.out.println("id:"+highlighting.get(item.getId()).get("id").get(0));
            System.out.println("title:"+highlighting.get(item.getId()).get("title").get(0));
        }
    }

    
}

======================================================
package com.kang.solrj.service;

import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;

import com.kang.solrj.pojo.Foo;

public class SolrjService {

    // 定义http的solr服务
    private HttpSolrServer httpSolrServer;

    public SolrjService(HttpSolrServer httpSolrServer) {
        this.httpSolrServer = httpSolrServer;
    }

    public void add(Foo foo) throws Exception {
        this.httpSolrServer.addBean(foo); //添加数据到solr服务器
        this.httpSolrServer.commit(); //提交
    }

    public void delete(List<String> ids) throws Exception {
        this.httpSolrServer.deleteById(ids);
        this.httpSolrServer.commit(); //提交
    }

    public List<Foo> search(String keywords, Integer page, Integer rows) throws Exception {
        SolrQuery solrQuery = new SolrQuery(); //构造搜索条件
        solrQuery.setQuery("title:" + keywords); //搜索关键词
        // 设置分页 start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。
        solrQuery.setStart((Math.max(page, 1) - 1) * rows);
        solrQuery.setRows(rows);

        //是否需要高亮
        boolean isHighlighting = !StringUtils.equals("*", keywords) && StringUtils.isNotEmpty(keywords);

        if (isHighlighting) {
            // 设置高亮
            solrQuery.setHighlight(true); // 开启高亮组件
            solrQuery.addHighlightField("title");// 高亮字段
            solrQuery.setHighlightSimplePre("<em>");// 标记,高亮关键字前缀
            solrQuery.setHighlightSimplePost("</em>");// 后缀
        }

        // 执行查询
        QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);
        List<Foo> foos = queryResponse.getBeans(Foo.class);
        if (isHighlighting) {
            // 将高亮的标题数据写回到数据对象中
            Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();
            for (Map.Entry<String, Map<String, List<String>>> highlighting : map.entrySet()) {
                for (Foo foo : foos) {
                    if (!highlighting.getKey().equals(foo.getId().toString())) {
                        continue;
                    }
                    foo.setTitle(StringUtils.join(highlighting.getValue().get("title"), ""));
                    break;
                }
            }
        }

        return foos;
    }

}

=======================
Skip to content
Search or jump to…
  
package solr.exe;

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 java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 增删改都需要提交事务
 * @author lxt
 * @date 2019-09-04
 */
public class SolrTest {

    private final static String BASE_URL="http://192.168.43.184:8080/solr/";

    /**
     * 增改
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testAdd() throws IOException, SolrServerException {
        SolrServer solrServer=new HttpSolrServer(BASE_URL);
        SolrInputDocument doc=new SolrInputDocument();
        doc.addField("title_ik1","腾讯音乐");
        doc.addField("title_ik","百度云音乐");
        doc.addField("id","001");
        solrServer.add(doc);
        solrServer.commit();
    }

    /**
     * 删除
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testDelete() throws IOException, SolrServerException {
        SolrServer client=new HttpSolrServer(BASE_URL);
        client.deleteById("002");
        //client.deleteByQuery("*:*");
        client.commit();
    }

    /**
     * 查询
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public  void  testQuery() throws IOException, SolrServerException {
        SolrServer client=new HttpSolrServer(BASE_URL);
        //查询条件
        SolrQuery query=new SolrQuery();
         //q
         query.setQuery("title_ik:音乐");
         //分页
         query.setStart(0);
         query.setRows(10);
         query.setHighlight(true);
         final String highLightField="title_ik";
         query.addHighlightField(highLightField);
         //前缀便签,后缀标签
         query.setHighlightSimplePost("<span style='color:red'>");
         query.setHighlightSimplePre("</span>");
        QueryResponse response = client.query(query);
        //response
        SolrDocumentList results = response.getResults();
        //highlighting     highlighting和response和responseHeader都是同一数据级别
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        //solr 8支持lambda
        for (SolrDocument x : results) {
            System.out.println(x.getFieldValue("title_ik"));
            System.out.println(x.getFieldValue("title_ik1"));
            //第一个是key是id的值
            Map<String, List<String>> stringListMap = highlighting.get(x.getFieldValue("id"));
            if (!stringListMap.isEmpty()){
                List<String> strings = stringListMap.get(highLightField);
                //正常业务逻辑是要返回实体类的,没有该字段的值就应该返回未高亮的

                    System.out.println(strings.get(0));

            }



        }


    }


}
==================================
package org.ten.mue;

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.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * Created by yang_yancy on 2016/8/21.
 * Solr Demo
 * 参考资料
 * http://wiki.apache.org/solr/IntegratingSolr?highlight=%28%28SolJava%29%29#Java
 * http://wiki.apache.org/solr/Solrj
 */
public class SolrDemo {

    public static String solrURL = "http://localhost:8080/solr/core1";

    public static void main(String[] args) {
        //addDoc();
        //addDoc2();
        //addDoc3();
        queryDoc();
        //delDoc();
        //delDoc2();
        //delDoc3();
    }

    /**SolrClient solr = new HttpSolrClient(solrURL);
     * 查询
     */
    public static void queryDoc(){
        SolrClient solr = new HttpSolrClient(solrURL);

        SolrQuery solrQuery = new SolrQuery();
        //solrQuery.setQuery("*ten*");
        solrQuery.setQuery("name:ten* id:9988");
        solrQuery.setFields("id", "name", "price");//需要返回的数据
        //solrQuery.setRows(Integer.MAX_VALUE);//查询文档中所有符合条件的数据
        solrQuery.setStart(0);//从文档中第0条数据开始检索,默认时从第0条开始
        solrQuery.setRows(10);
        solrQuery.setSort("price", SolrQuery.ORDER.desc);//排序方式

        //只有当设置了分词后,高亮才会有效果
        /*solrQuery.setHighlight(true);
        solrQuery.addHighlightField("name");//高亮显示字段
        solrQuery.setHighlightSimplePre("<font color='red'>");//标记高亮关键字前缀
        solrQuery.setHighlightSimplePost("</font>");//标记高亮关键字后缀*/
        try {
            QueryResponse response = solr.query(solrQuery);
            SolrDocumentList list = response.getResults();
            System.out.println("文档个数:" + list.getNumFound());
            System.out.println("查询耗时:" + response.getQTime());
            //普通方式处理查询结果
            /*for (SolrDocument document : list){
                System.out.println(document.getFieldValue("id"));
                System.out.println(document.getFieldValue("name"));
                System.out.println(document.getFieldValue("price"));
            }*/

            //绑定JavaBean对象处理查询结果
            DocumentObjectBinder documentObjectBinder = new DocumentObjectBinder();
            List<SolrBean> solrBeanList = documentObjectBinder.getBeans(SolrBean.class, list);
            for (SolrBean solrBean : solrBeanList){
                System.out.println("id:" + solrBean.getId());
                System.out.println("name:" + solrBean.getName());
                System.out.println("price:" + solrBean.getPrice());
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 方法一
     * 创建索引
     */
    public static void addDoc() {

        SolrClient solr = new HttpSolrClient(solrURL);

        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "9988");
        doc.addField("name", "my name is yancy");
        doc.addField("price", "49.9");
        try {
            UpdateResponse response = solr.add(doc);
            solr.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 方法二
     * 创建索引
     */
    public static  void addDoc2(){
        SolrClient solr = new HttpSolrClient(solrURL);

        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        for(int i = 0;i <= 1000000;i++){
            SolrInputDocument solrDocument = new SolrInputDocument();
            solrDocument.addField("id", "100" + i);
            solrDocument.addField("name", "my name is mue" + i);
            solrDocument.addField("price", "45.7" + i);
            docs.add(solrDocument);
        }
        try {
            solr.add(docs);
            solr.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 方法三
     * 通过对象的方式添加索引
     */
    public static void addDoc3(){
        SolrClient solr = new HttpSolrClient(solrURL);

        Collection<SolrBean> docs = new ArrayList<SolrBean>();
        DocumentObjectBinder documentObjectBinder = new DocumentObjectBinder();
        for (int i = 0;i < 10;i++){
            SolrBean solrBean = new SolrBean();
            solrBean.setId("200" + i);
            solrBean.setName("ten" + i);
            solrBean.setPrice(22 + i);
            SolrInputDocument doc = documentObjectBinder.toSolrInputDocument(solrBean);
            docs.add(solrBean);
        }

        try {
            solr.addBeans(docs);
            solr.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 方法一
     * 删除指定索引
     */
    public static void delDoc(){
        SolrClient solr = new HttpSolrClient(solrURL);

        try {
            solr.deleteById("2001");//根据id删除索引
            //solr.deleteByQuery("name:ten0");//根据指定字段删除索引
            solr.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 方法二
     * 删除指定索引
     */
    public static void delDoc2(){
        SolrClient solr = new HttpSolrClient(solrURL);

        List<String> list = new ArrayList<String>();
        for(int i = 0;i < 5;i++){
            list.add("200" + i);//根据id删除
        }
        try {
            UpdateResponse response = solr.deleteById(list);
            solr.commit();
            System.out.println(response.getStatus());
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 方法三
     * 清空所有索引
     */
    public static void delDoc3(){
        SolrClient solr = new HttpSolrClient(solrURL);

        try {
            UpdateResponse response = solr.deleteByQuery("*:*");
            solr.commit();
            System.out.println(response.getStatus());
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
==============================================
package com.test.solrj;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Before;
import org.junit.Test;

import java.util.List;
import java.util.Map;

/**
 * @author chengzhengbo
 * @Date 2017/11/20
 * @TIME 上午11:31
 */
public class SolrClient {
    private static final String URL = "http://localhost:8080/solr-4.1.0/";

    private HttpSolrClient server = null;

    @Before
    public void init() {
        // 创建 server
        server = new HttpSolrClient(URL);
    }

    @Test
    public void addDoc() {

        SolrInputDocument doc = new SolrInputDocument();

        doc.addField("id", "id");
        doc.addField("title", "document");

        try {
            UpdateResponse response = server.add(doc);
            // 提交
            server.commit();

            System.out.println("########## Query Time :" + response.getQTime());
            System.out.println("########## Elapsed Time :" + response.getElapsedTime());
            System.out.println("########## Status :" + response.getStatus());

        } catch (Exception e) {
            System.err.print(e);
        }
    }


    /**
     * 查询
     */
    @Test
    public void queryTest() {
        String query = "*:*";
        SolrQuery solrQuery = new SolrQuery(query);

        //查询语法
//        solrQuery.set("q","id:carver");
        //过滤插叙
//        solrQuery.set("fq","id:carver");
        //排序
//        solrQuery.setSort("id", SolrQuery.ORDER.desc);
        //分页
//        int pageSize = 1;
//        int rows = 222;
//        int start = rows*(pageSize-1);
//        solrQuery.setStart(start);
//        solrQuery.setRows(rows);

        //开启高亮
        solrQuery.setHighlight(true);
        solrQuery.setQuery("title:cainiao");
        //高亮字段
        solrQuery.addHighlightField("title");
        //前缀标志
        solrQuery.setHighlightSimplePre("<span color=red>");
        //后缀标志
        solrQuery.setHighlightSimplePost("</span>");

        //用于调试程序
        System.out.println(solrQuery+"==========");
        try {
            //相应查询
            QueryResponse response = null;
            response = server.query(solrQuery);
            //匹配文档
            SolrDocumentList solrDocumentList = response.getResults();

            System.out.println("总共" + solrDocumentList.getNumFound() + "条记录");
            //从响应中获取高亮信息
            Map<String, Map<String, List<String>>> map = response.getHighlighting();

            for (SolrDocument doc : solrDocumentList) {
                System.out.println("id : " + doc.get("id") + "  title : " + doc.get("title"));
                //取出高亮信息
                if(map!=null){
                    //根据id取出高亮信息
                    String id = (String) doc.get("id");
                    Map<String, List<String>> idMap = map.get(id);
                    //取出高亮字段信息
                    List<String> title = idMap.get("title");
                    if(title!=null) {
                        for (int i = 0; i < title.size(); i++) {
                            System.out.println("title=====" + "  " + title.get(i));
                        }
                    }

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void updateTest() {

        SolrInputDocument doc = new SolrInputDocument();

        doc.addField("id", "czb");
        doc.addField("title", "java think ");

        try {
            UpdateResponse add = server.add(doc);
            System.out.println(add.getRequestUrl());
            System.out.println(add.getElapsedTime());
            System.out.println(add.getResponse());
            System.out.println(add.getElapsedTime());
            //查询
            queryTest();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}
==================================
import com.baidu.Item;
import org.apache.solr.client.solrj.SolrQuery;
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 java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @auther SyntacticSugar
 * @data 2018/11/24 0024下午 11:31
 */
public class SolrJTest {

    @Test
    public void test() throws IOException, SolrServerException {
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "4");
        document.addField("title", "五菱宏光,神车");
        document.addField("price", 30000F);
        //
        server.add(document);
        //提交
        server.commit();
    }

    /**
     * pojo中属性没有注解@Field,导致solrJ并不知道哪个属性要对应到索引库中
     *
     * @throws IOException
     * @throws SolrServerException
     */
    @Test
    public void testCreateIndexBean() throws IOException, SolrServerException {
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        //
        Item item = new Item();
        item.setId("9");
        item.setPrice(3000F);
        item.setTitle("小米手机");
        // server中添加bean
        server.addBean(item);
        server.commit();
    }

    /**
     * testDeleteIndexById
     * 根据id  删除
     */
    @Test
    public void testDeleteIndexById() throws IOException, SolrServerException {
        //使用solrj的jar
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        server.deleteById("1");
        server.commit();
    }

    /**
     * 根据查询条件删除索引
     */
    @Test
    public void testDeleteIndexByQuery() throws IOException, SolrServerException {
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        server.deleteByQuery("title:iphone");
        server.commit();
    }

    /**
     * query返回document 的形式
     */
    @Test
    public void testQueryToDocument() throws IOException, SolrServerException {
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        //public class SolrQuery extends ModifiableSolrParams
        SolrQuery query = new SolrQuery("title:手机");
        //public QueryResponse query(SolrParams params)
        QueryResponse response = server.query(query);
        SolrDocumentList list = response.getResults();
        /**
         * 遍历list ,取出document
         */
        for (SolrDocument entries : list) {
            System.out.println(entries.getFieldValue("id"));
            System.out.println(entries.getFieldValue("title"));
            System.out.println(entries.getFieldValue("price"));
        }
        System.out.println("查询的总条数:" + list.size());
    }

    /**
     * query返回javabean 的形式
     */
    @Test
    public void testQueryToJavabean() throws IOException, SolrServerException {
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        /**
         * 普通查询
         */
//        SolrQuery query = new SolrQuery("title:iphone");
        /**
         * boolean  查询
         */
//        SolrQuery query = new SolrQuery("title:iphone OR title:小米");
        /**
         *  相似度查询 ,类似于Lucene的编辑距离0-2
         */
//        SolrQuery query = new SolrQuery("title:ipHOne~2");
        /**
         * 范围查询  xx  TO  xx
         * 闭区间
         */
        SolrQuery query = new SolrQuery("price:[10 TO 10000]");

        //
        QueryResponse response = server.query(query);
        List<Item> itemList = response.getBeans(Item.class);
        for (Item item : itemList) {
            System.out.println(item);
        }
        System.out.println("搜多到的条数:" + itemList.size());
    }

    /**
     * 使用 solrj  查询排序
     */
    @Test
    public void testQueryOrder() throws SolrServerException {
        //连接solr服务器、创建query对象、设置查询排序参数 、查询
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        SolrQuery query = new SolrQuery("title:手机");
        /**设置排序源码
         *  public SolrQuery setSort(String field, ORDER order) {
         *     return setSort(new SortClause(field, order));
         *   }
         */
        query.setSort("price", SolrQuery.ORDER.desc);
        QueryResponse response = server.query(query);
        //
        List<Item> itemList = response.getBeans(Item.class);
        for (Item item : itemList) {
            System.out.println(item.toString());
        }
        System.out.println("搜索到的条数:" + itemList.size());
    }

    /**
     * 使用 solrj 高亮显示 testHighlightingQuery
     * 1、set高亮标签,add高亮字段
     * 2、高亮工具
     */
    @Test
    public void testHighlightingQuery() throws SolrServerException {
        //连接solr服务器、创建query对象、高亮、查询
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        SolrQuery query = new SolrQuery("title:手机");
        // 标签、字段
        query.setHighlightSimplePre("<em>");
        query.setHighlightSimplePost("</em>");
        query.addHighlightField("title");
        //
        QueryResponse response = server.query(query);
        /**
         *   高亮的响应结果  是一个双层map :
         *   id  :对应id的高亮字段
         *   高亮字段:高亮值  为list
         */
        Map<String, Map<String, List<String>>> map = response.getHighlighting();
        /**
         * 普通查询结果
         */
        List<Item> itemList = response.getBeans(Item.class);
        for (Item item : itemList) {
            System.out.println("id" + item.getId());
            //  高亮值  为list
            System.out.println("title" + map.get(item.getId()).get("title").get(0));
            System.out.println("price" + item.getPrice());
        }
        System.out.println("搜索到的条数:" + itemList.size());
    }

    /**
     * 分页
     * 1、准备参数
     * 2、设置到query中
     */
    @Test
    public void testPagedQuery() throws SolrServerException {
        //连接solr服务器、创建query对象、设置查询排序参数 、查询
        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");
        SolrQuery query = new SolrQuery("title:手机");
        // 设置分页
        int currentPage = 2;
        final int PAGE_SIZE = 4;
        int start = (currentPage - 1) * PAGE_SIZE;
        // 设置起始页,设置每页显示数目
        query.setStart(start);
        query.setRows(PAGE_SIZE);
        //
        QueryResponse response = server.query(query);
        List<Item> itemList = response.getBeans(Item.class);
        //展示数据
        System.out.println("当前页:"+currentPage+"共查询数据:"+itemList.size());
        for (Item item : itemList) {
            System.out.println("数据:"+item.toString());
        }
    }

}
===========================

 

      package com.tongzhi.solr;
import java.util.List;import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;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.Before;import org.junit.Test;
import com.tongzhi.vo.SolrItem;
/** * solr的添加修改 * @author shan * */public class SolrTest {private HttpSolrServer httpSolrServer;@Beforepublic void setUp(){// 初始化httpSolrServer;参数为solr的访问地址httpSolrServer = new HttpSolrServer("http://localhost:8080/solr");}/** * 查询索引方式一 * @throws Exception  */@Testpublic void testSearch1() throws Exception{//创建查询对象SolrQuery solrQuery = new SolrQuery();//搜索标题中包含手机并且状态为1的文档solrQuery.setQuery("title:手机 AND status:1");//设置过滤条件,在上面的过滤条件之后再加下面的条件//返回的数据价格在300000-800000(不包含800000)solrQuery.setFilterQueries("price:[300000 TO 800000]");//设置排序,根据价格降序排序solrQuery.setSort("price", ORDER.desc);//设置分页solrQuery.setStart(0);//设置起始索引号solrQuery.setRows(10);//页大小//设置高亮solrQuery.setHighlight(true);solrQuery.addHighlightField("title");//添加需要高亮显示的域solrQuery.setHighlightSimplePre("<em>");//高亮前缀标签solrQuery.setHighlightSimplePost("</em>");//高亮后缀标签]//查询QueryResponse response = httpSolrServer.query(solrQuery);//获取总记录数long total = response.getResults().getNumFound();System.out.println("本次查询到的总记录数为:" + total);//获取结果列表List<SolrItem> list = response.getBeans(SolrItem.class);//处理高亮标题if (list != null) {//获得高亮数据Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();//遍历所有数据for (SolrItem item : list) {System.out.println("-------------------------------------");System.out.println("id = " + item.getId());System.out.println("原标题title = " + item.getTitle());System.out.println("高亮标题title = " + highlighting.get(item.getId().toString()).get("title").get(0));System.out.println("price = " + item.getPrice());System.out.println("image = " + item.getImage());System.out.println("sellPoint = " + item.getSellPoint());//因为在schema.xml时没有设置该域是存储的所以为null,但是设置了要索引,所以可以进行搜索System.out.println("status = " + item.getStatus());}}}/** * 查询索引方式二 * @throws Exception  */@Testpublic void testSearch2() throws Exception{//创建查询对象SolrQuery solrQuery = new SolrQuery();//搜索标题中包含手机并且状态为1的文档solrQuery.setQuery("title:手机 AND status:1");//设置过滤条件,在上面的过滤条件之后再加下面的条件//返回的数据价格在300000-800000(不包含800000)solrQuery.setFilterQueries("price:[300000 TO 800000]");//设置排序,根据价格降序排序solrQuery.setSort("price", ORDER.desc);//设置分页solrQuery.setStart(0);//设置起始索引号solrQuery.setRows(10);//页大小//设置高亮solrQuery.setHighlight(true);solrQuery.addHighlightField("title");//添加需要高亮显示的域solrQuery.setHighlightSimplePre("<em>");//高亮前缀标签solrQuery.setHighlightSimplePost("</em>");//高亮后缀标签]//查询QueryResponse response = httpSolrServer.query(solrQuery);//获取总记录数long total = response.getResults().getNumFound();System.out.println("本次查询到的总记录数为:" + total);//获取结果列表SolrDocumentList results = response.getResults();//处理高亮标题if (results != null) {//获得高亮数据Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();//遍历所有数据for (SolrDocument solrDocument : results) {System.out.println("-------------------------------------");System.out.println("id = " + solrDocument.get("id"));System.out.println("原标题title = " + solrDocument.get("title"));System.out.println("高亮标题title = " + highlighting.get(solrDocument.get("id").toString()).get("title").get(0));System.out.println("price = " + solrDocument.get("price"));System.out.println("image = " + solrDocument.get("image"));System.out.println("sellPoint = " + solrDocument.get("sellPoint"));//因为在schema.xml时没有设置该域是存储的所以为null,但是设置了要索引,所以可以进行搜索System.out.println("status = " + solrDocument.get("status"));}}}/** * 添加方式一:SolrInputDocument *  * @throws Exception */@Testpublic void testAddDocument() throws Exception{// 创建SolrInputDocument对象,通过它来添加一个个的域SolrInputDocument solrInputDocument = new SolrInputDocument();// 参数1:域的名称,域的名称必须是在schema.xml中定义的;// 参数2:域的值// 注意:id的域不能少solrInputDocument.addField("id", 123L);solrInputDocument.addField("title", "通过代码添加--solrInputDocument方式");solrInputDocument.addField("price", 2000L);solrInputDocument.addField("sellPoint", "我会Java编程");solrInputDocument.addField("image", "http://image.taotao.com/jd/b43e6da16b414d7eb372863f502034b1.jpg");solrInputDocument.addField("status", 1);// 将文档添加到索引库索引化httpSolrServer.add(solrInputDocument);// 提交,在更新solr后要记得提交httpSolrServer.commit();}/** * 方式一:Bean *  * @throws Exception */@Testpublic void testAddBean() throws Exception{//创建提交的对象SolrItem solrItem = new SolrItem();solrItem.setId(124L);solrItem.setTitle("通过代码添加--bean方式");solrItem.setImage("http://image.taotao.com/jd/b43e6da16b414d7eb372863f502034b1.jpg");solrItem.setPrice(2000L);solrItem.setSellPoint("我会Java编程");solrItem.setStatus(1);// 将文档添加到索引库索引化httpSolrServer.addBean(solrItem);// 提交,在更新solr后要记得提交httpSolrServer.commit();}/** * 根据ID删除索引文档 * @throws Exception  */@Testpublic void testDeleteById() throws Exception{// 指定要删除的文档id域对应的值httpSolrServer.deleteById("123");//提交删除httpSolrServer.commit();}/** * 根据条件删除索引文档 * 删除所有 * @throws Exception  */@Testpublic void testDeleteByQuery() throws Exception{// 根据条件删除索引文档httpSolrServer.deleteByQuery("title:代码");//删除所有的索引文档//httpSolrServer.deleteByQuery("*:*");//提交删除httpSolrServer.commit();}}  =================================================================  SolrParams solrParams=new SolrQuery("(id:2 OR id:3) AND (id:3 OR id:4)");  package cn.flyflyyun.Solrj;
import org.apache.solr.client.solrj.SolrQuery;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.params.SolrParams;import org.junit.Test;
import java.util.List;import java.util.Map;
/** * 查询索引 */
public class SolrJQuery {
    /**     * 通过遍历document     * @throws SolrServerException     */    @Test    public void queryIndex() throws SolrServerException {        //1.连接Solr服务器        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");
        //2.初始化查询对象(设置查询条件)        SolrParams params = new SolrQuery("*:*");
        //3.执行查询,并获得查询结果集        QueryResponse query = solrServer.query(params);        SolrDocumentList documentList = query.getResults();
        System.out.println("共查询到"+documentList.getNumFound()+"条结果");
        //4.获得查询字段        for (SolrDocument document : documentList) {            System.out.println("id:"+document.getFieldValue("id"));            System.out.println("title"+document.getFieldValue("title"));        }    }
    /**     * 返回Bean     * @throws SolrServerException     */    @Test    public void testBeanQuery() throws SolrServerException {        //1.连接Solr服务器        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");
        //2.初始化查询对象(设置查询条件)        //SolrParams params  = new SolrJQuery("*:*");  //查询所有       //SolrParams params = new SolrQuery("id:5 OR id:6");  //布尔查询 OR
        //查询Id不是5的数据,布尔查询 NOT        //SolrParams params = new SolrQuery("NOT id:5");
        //查询id为5且title为"迷惘开头的索引",布尔查询 and        //SolrParams params = new SolrQuery("id:5 and title:迷惘*");

        //相似度查询,最大修改次为2        //SolrParams params = new SolrQuery("title:挪威的天空~2");
        //范围查询(TO区分大小写,必须写大写)        SolrParams params = new SolrQuery("title:华夏 OR id:[4 TO 7]");
        //3.执行查询,并获得查询结果集        QueryResponse query = solrServer.query(params);                //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)        List<Item> list = query.getBeans(Item.class);
        System.out.println("共查询到"+query.getResults().getNumFound()+"条结果");
        //4.获得查询字段(遍历List集合)        for (Item item : list) {            System.out.println("id"+item.getId());            System.out.println("title"+item.getTitle());        }    }

    /**     * 排序查询     * @throws SolrServerException     */    @Test    public void testSortQuery() throws SolrServerException {        //1.连接Solr服务器        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");
        //范围查询(TO区分大小写,必须写大写)        SolrQuery query = new SolrQuery("id:[4 TO 7]");
        //设置排序        query.setSort("id", SolrQuery.ORDER.desc);
        //3.执行查询,并获得查询结果集        QueryResponse response = solrServer.query(query);
        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)        List<Item> list = response.getBeans(Item.class);
        System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");
        //4.获得查询字段(遍历List集合)        for (Item item : list) {            System.out.println("id"+item.getId());            System.out.println("title"+item.getTitle());        }    }

    /**     * 分页查询     * @throws SolrServerException     */    @Test    public void testPageQuery() throws SolrServerException {
        //准备分页参数        int pageNum=2;  //页码        int pageSize=2; //每页显示多少条数据
        //1.连接Solr服务器        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");
        //范围查询(TO区分大小写,必须写大写)        SolrQuery query = new SolrQuery("id:[4 TO 7]");
        //设置排序        query.setSort("id", SolrQuery.ORDER.desc);
        //设置分页        query.setStart((pageNum-1)*pageSize);  //从哪个索引开始查询        query.setRows(pageSize);  //每页多少数据
        //3.执行查询,并获得查询结果集        QueryResponse response = solrServer.query(query);
        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)        List<Item> list = response.getBeans(Item.class);
        System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");
        //4.获得查询字段(遍历List集合)        for (Item item : list) {            System.out.println("id"+item.getId());            System.out.println("title"+item.getTitle());        }    }

    /**     * 高亮显示     * @throws SolrServerException     */    @Test    public void testHighLightingQuery() throws SolrServerException {
        //1.连接Solr服务器        HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/core1");
        //范围查询(TO区分大小写,必须写大写)        SolrQuery query = new SolrQuery("title:挪威");
        //设置排序        query.setSort("id", SolrQuery.ORDER.desc);
        //设置高亮        //设置前置标签        query.setHighlightSimplePre("<em>");
        //设置后置标签        query.setHighlightSimplePost("</em>");
        //设置高亮字段        query.addHighlightField("title");        query.addHighlightField("id");
        //3.执行查询,并获得查询结果集        QueryResponse response = solrServer.query(query);
        //把查询结果封装到Item对象中(如果分页,就只封装当前页数据)        List<Item> list = response.getBeans(Item.class);
        //返回高亮的结果集(id(key):field(value))        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();                System.out.println("共查询到"+response.getResults().getNumFound()+"条结果");
        //4.获得查询字段(遍历List集合)        for (Item item : list) {            System.out.println("id:"+item.getId());            //System.out.println("id:"+highlighting.get(item.getId()).get("id").get(0));            System.out.println("title:"+highlighting.get(item.getId()).get("title").get(0));        }    }
    }
======================================================package com.kang.solrj.service;
import java.util.List;import java.util.Map;
import org.apache.commons.lang3.StringUtils;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.client.solrj.response.QueryResponse;
import com.kang.solrj.pojo.Foo;
public class SolrjService {
    // 定义http的solr服务    private HttpSolrServer httpSolrServer;
    public SolrjService(HttpSolrServer httpSolrServer) {        this.httpSolrServer = httpSolrServer;    }
    public void add(Foo foo) throws Exception {        this.httpSolrServer.addBean(foo); //添加数据到solr服务器        this.httpSolrServer.commit(); //提交    }
    public void delete(List<String> ids) throws Exception {        this.httpSolrServer.deleteById(ids);        this.httpSolrServer.commit(); //提交    }
    public List<Foo> search(String keywords, Integer page, Integer rows) throws Exception {        SolrQuery solrQuery = new SolrQuery(); //构造搜索条件        solrQuery.setQuery("title:" + keywords); //搜索关键词        // 设置分页 start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。        solrQuery.setStart((Math.max(page, 1) - 1) * rows);        solrQuery.setRows(rows);
        //是否需要高亮        boolean isHighlighting = !StringUtils.equals("*", keywords) && StringUtils.isNotEmpty(keywords);
        if (isHighlighting) {            // 设置高亮            solrQuery.setHighlight(true); // 开启高亮组件            solrQuery.addHighlightField("title");// 高亮字段            solrQuery.setHighlightSimplePre("<em>");// 标记,高亮关键字前缀            solrQuery.setHighlightSimplePost("</em>");// 后缀        }
        // 执行查询        QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);        List<Foo> foos = queryResponse.getBeans(Foo.class);        if (isHighlighting) {            // 将高亮的标题数据写回到数据对象中            Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();            for (Map.Entry<String, Map<String, List<String>>> highlighting : map.entrySet()) {                for (Foo foo : foos) {                    if (!highlighting.getKey().equals(foo.getId().toString())) {                        continue;                    }                    foo.setTitle(StringUtils.join(highlighting.getValue().get("title"), ""));                    break;                }            }        }
        return foos;    }
}
=======================Skip to contentSearch or jump to…  package solr.exe;
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 java.io.IOException;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;
/** * 增删改都需要提交事务 * @author lxt * @date 2019-09-04 */public class SolrTest {
    private final static String BASE_URL="http://192.168.43.184:8080/solr/";
    /**     * 增改     * @throws IOException     * @throws SolrServerException     */    @Test    public void testAdd() throws IOException, SolrServerException {        SolrServer solrServer=new HttpSolrServer(BASE_URL);        SolrInputDocument doc=new SolrInputDocument();        doc.addField("title_ik1","腾讯音乐");        doc.addField("title_ik","百度云音乐");        doc.addField("id","001");        solrServer.add(doc);        solrServer.commit();    }
    /**     * 删除     * @throws IOException     * @throws SolrServerException     */    @Test    public void testDelete() throws IOException, SolrServerException {        SolrServer client=new HttpSolrServer(BASE_URL);        client.deleteById("002");        //client.deleteByQuery("*:*");        client.commit();    }
    /**     * 查询     * @throws IOException     * @throws SolrServerException     */    @Test    public  void  testQuery() throws IOException, SolrServerException {        SolrServer client=new HttpSolrServer(BASE_URL);        //查询条件        SolrQuery query=new SolrQuery();         //q         query.setQuery("title_ik:音乐");         //分页         query.setStart(0);         query.setRows(10);         query.setHighlight(true);         final String highLightField="title_ik";         query.addHighlightField(highLightField);         //前缀便签,后缀标签         query.setHighlightSimplePost("<span style='color:red'>");         query.setHighlightSimplePre("</span>");        QueryResponse response = client.query(query);        //response        SolrDocumentList results = response.getResults();        //highlighting     highlighting和response和responseHeader都是同一数据级别        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();        //solr 8支持lambda        for (SolrDocument x : results) {            System.out.println(x.getFieldValue("title_ik"));            System.out.println(x.getFieldValue("title_ik1"));            //第一个是key是id的值            Map<String, List<String>> stringListMap = highlighting.get(x.getFieldValue("id"));            if (!stringListMap.isEmpty()){                List<String> strings = stringListMap.get(highLightField);                //正常业务逻辑是要返回实体类的,没有该字段的值就应该返回未高亮的
                    System.out.println(strings.get(0));
            }


        }

    }

}==================================package org.ten.mue;
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.beans.DocumentObjectBinder;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;
import java.io.IOException;import java.util.ArrayList;import java.util.Collection;import java.util.List;
/** * Created by yang_yancy on 2016/8/21. * Solr Demo * 参考资料 * http://wiki.apache.org/solr/IntegratingSolr?highlight=%28%28SolJava%29%29#Java * http://wiki.apache.org/solr/Solrj */public class SolrDemo {
    public static String solrURL = "http://localhost:8080/solr/core1";
    public static void main(String[] args) {        //addDoc();        //addDoc2();        //addDoc3();        queryDoc();        //delDoc();        //delDoc2();        //delDoc3();    }
    /**SolrClient solr = new HttpSolrClient(solrURL);     * 查询     */    public static void queryDoc(){        SolrClient solr = new HttpSolrClient(solrURL);
        SolrQuery solrQuery = new SolrQuery();        //solrQuery.setQuery("*ten*");        solrQuery.setQuery("name:ten* id:9988");        solrQuery.setFields("id", "name", "price");//需要返回的数据        //solrQuery.setRows(Integer.MAX_VALUE);//查询文档中所有符合条件的数据        solrQuery.setStart(0);//从文档中第0条数据开始检索,默认时从第0条开始        solrQuery.setRows(10);        solrQuery.setSort("price", SolrQuery.ORDER.desc);//排序方式
        //只有当设置了分词后,高亮才会有效果        /*solrQuery.setHighlight(true);        solrQuery.addHighlightField("name");//高亮显示字段        solrQuery.setHighlightSimplePre("<font color='red'>");//标记高亮关键字前缀        solrQuery.setHighlightSimplePost("</font>");//标记高亮关键字后缀*/        try {            QueryResponse response = solr.query(solrQuery);            SolrDocumentList list = response.getResults();            System.out.println("文档个数:" + list.getNumFound());            System.out.println("查询耗时:" + response.getQTime());            //普通方式处理查询结果            /*for (SolrDocument document : list){                System.out.println(document.getFieldValue("id"));                System.out.println(document.getFieldValue("name"));                System.out.println(document.getFieldValue("price"));            }*/
            //绑定JavaBean对象处理查询结果            DocumentObjectBinder documentObjectBinder = new DocumentObjectBinder();            List<SolrBean> solrBeanList = documentObjectBinder.getBeans(SolrBean.class, list);            for (SolrBean solrBean : solrBeanList){                System.out.println("id:" + solrBean.getId());                System.out.println("name:" + solrBean.getName());                System.out.println("price:" + solrBean.getPrice());            }        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }

    /**     * 方法一     * 创建索引     */    public static void addDoc() {
        SolrClient solr = new HttpSolrClient(solrURL);
        SolrInputDocument doc = new SolrInputDocument();        doc.addField("id", "9988");        doc.addField("name", "my name is yancy");        doc.addField("price", "49.9");        try {            UpdateResponse response = solr.add(doc);            solr.commit();        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }
    }
    /**     * 方法二     * 创建索引     */    public static  void addDoc2(){        SolrClient solr = new HttpSolrClient(solrURL);
        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();        for(int i = 0;i <= 1000000;i++){            SolrInputDocument solrDocument = new SolrInputDocument();            solrDocument.addField("id", "100" + i);            solrDocument.addField("name", "my name is mue" + i);            solrDocument.addField("price", "45.7" + i);            docs.add(solrDocument);        }        try {            solr.add(docs);            solr.commit();        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }
    /**     * 方法三     * 通过对象的方式添加索引     */    public static void addDoc3(){        SolrClient solr = new HttpSolrClient(solrURL);
        Collection<SolrBean> docs = new ArrayList<SolrBean>();        DocumentObjectBinder documentObjectBinder = new DocumentObjectBinder();        for (int i = 0;i < 10;i++){            SolrBean solrBean = new SolrBean();            solrBean.setId("200" + i);            solrBean.setName("ten" + i);            solrBean.setPrice(22 + i);            SolrInputDocument doc = documentObjectBinder.toSolrInputDocument(solrBean);            docs.add(solrBean);        }
        try {            solr.addBeans(docs);            solr.commit();        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }
    /**     * 方法一     * 删除指定索引     */    public static void delDoc(){        SolrClient solr = new HttpSolrClient(solrURL);
        try {            solr.deleteById("2001");//根据id删除索引            //solr.deleteByQuery("name:ten0");//根据指定字段删除索引            solr.commit();        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }
    /**     * 方法二     * 删除指定索引     */    public static void delDoc2(){        SolrClient solr = new HttpSolrClient(solrURL);
        List<String> list = new ArrayList<String>();        for(int i = 0;i < 5;i++){            list.add("200" + i);//根据id删除        }        try {            UpdateResponse response = solr.deleteById(list);            solr.commit();            System.out.println(response.getStatus());        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }
    }
    /**     * 方法三     * 清空所有索引     */    public static void delDoc3(){        SolrClient solr = new HttpSolrClient(solrURL);
        try {            UpdateResponse response = solr.deleteByQuery("*:*");            solr.commit();            System.out.println(response.getStatus());        } catch (SolrServerException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}==============================================package com.test.solrj;
import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.junit.Before;import org.junit.Test;
import java.util.List;import java.util.Map;
/** * @author chengzhengbo * @Date 2017/11/20 * @TIME 上午11:31 */public class SolrClient {    private static final String URL = "http://localhost:8080/solr-4.1.0/";
    private HttpSolrClient server = null;
    @Before    public void init() {        // 创建 server        server = new HttpSolrClient(URL);    }
    @Test    public void addDoc() {
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "id");        doc.addField("title", "document");
        try {            UpdateResponse response = server.add(doc);            // 提交            server.commit();
            System.out.println("########## Query Time :" + response.getQTime());            System.out.println("########## Elapsed Time :" + response.getElapsedTime());            System.out.println("########## Status :" + response.getStatus());
        } catch (Exception e) {            System.err.print(e);        }    }

    /**     * 查询     */    @Test    public void queryTest() {        String query = "*:*";        SolrQuery solrQuery = new SolrQuery(query);
        //查询语法//        solrQuery.set("q","id:carver");        //过滤插叙//        solrQuery.set("fq","id:carver");        //排序//        solrQuery.setSort("id", SolrQuery.ORDER.desc);        //分页//        int pageSize = 1;//        int rows = 222;//        int start = rows*(pageSize-1);//        solrQuery.setStart(start);//        solrQuery.setRows(rows);
        //开启高亮        solrQuery.setHighlight(true);        solrQuery.setQuery("title:cainiao");        //高亮字段        solrQuery.addHighlightField("title");        //前缀标志        solrQuery.setHighlightSimplePre("<span color=red>");        //后缀标志        solrQuery.setHighlightSimplePost("</span>");
        //用于调试程序        System.out.println(solrQuery+"==========");        try {            //相应查询            QueryResponse response = null;            response = server.query(solrQuery);            //匹配文档            SolrDocumentList solrDocumentList = response.getResults();
            System.out.println("总共" + solrDocumentList.getNumFound() + "条记录");            //从响应中获取高亮信息            Map<String, Map<String, List<String>>> map = response.getHighlighting();
            for (SolrDocument doc : solrDocumentList) {                System.out.println("id : " + doc.get("id") + "  title : " + doc.get("title"));                //取出高亮信息                if(map!=null){                    //根据id取出高亮信息                    String id = (String) doc.get("id");                    Map<String, List<String>> idMap = map.get(id);                    //取出高亮字段信息                    List<String> title = idMap.get("title");                    if(title!=null) {                        for (int i = 0; i < title.size(); i++) {                            System.out.println("title=====" + "  " + title.get(i));                        }                    }
                }            }        } catch (Exception e) {            e.printStackTrace();        }    }
    @Test    public void updateTest() {
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "czb");        doc.addField("title", "java think ");
        try {            UpdateResponse add = server.add(doc);            System.out.println(add.getRequestUrl());            System.out.println(add.getElapsedTime());            System.out.println(add.getResponse());            System.out.println(add.getElapsedTime());            //查询            queryTest();
        } catch (Exception e) {            e.printStackTrace();        }
    }

}==================================import com.baidu.Item;import org.apache.solr.client.solrj.SolrQuery;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 java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Map;
/** * @auther SyntacticSugar * @data 2018/11/24 0024下午 11:31 */public class SolrJTest {
    @Test    public void test() throws IOException, SolrServerException {        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        SolrInputDocument document = new SolrInputDocument();        document.addField("id", "4");        document.addField("title", "五菱宏光,神车");        document.addField("price", 30000F);        //        server.add(document);        //提交        server.commit();    }
    /**     * pojo中属性没有注解@Field,导致solrJ并不知道哪个属性要对应到索引库中     *     * @throws IOException     * @throws SolrServerException     */    @Test    public void testCreateIndexBean() throws IOException, SolrServerException {        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        //        Item item = new Item();        item.setId("9");        item.setPrice(3000F);        item.setTitle("小米手机");        // server中添加bean        server.addBean(item);        server.commit();    }
    /**     * testDeleteIndexById     * 根据id  删除     */    @Test    public void testDeleteIndexById() throws IOException, SolrServerException {        //使用solrj的jar        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        server.deleteById("1");        server.commit();    }
    /**     * 根据查询条件删除索引     */    @Test    public void testDeleteIndexByQuery() throws IOException, SolrServerException {        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        server.deleteByQuery("title:iphone");        server.commit();    }
    /**     * query返回document 的形式     */    @Test    public void testQueryToDocument() throws IOException, SolrServerException {        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        //public class SolrQuery extends ModifiableSolrParams        SolrQuery query = new SolrQuery("title:手机");        //public QueryResponse query(SolrParams params)        QueryResponse response = server.query(query);        SolrDocumentList list = response.getResults();        /**         * 遍历list ,取出document         */        for (SolrDocument entries : list) {            System.out.println(entries.getFieldValue("id"));            System.out.println(entries.getFieldValue("title"));            System.out.println(entries.getFieldValue("price"));        }        System.out.println("查询的总条数:" + list.size());    }
    /**     * query返回javabean 的形式     */    @Test    public void testQueryToJavabean() throws IOException, SolrServerException {        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        /**         * 普通查询         *///        SolrQuery query = new SolrQuery("title:iphone");        /**         * boolean  查询         *///        SolrQuery query = new SolrQuery("title:iphone OR title:小米");        /**         *  相似度查询 ,类似于Lucene的编辑距离0-2         *///        SolrQuery query = new SolrQuery("title:ipHOne~2");        /**         * 范围查询  xx  TO  xx         * 闭区间         */        SolrQuery query = new SolrQuery("price:[10 TO 10000]");
        //        QueryResponse response = server.query(query);        List<Item> itemList = response.getBeans(Item.class);        for (Item item : itemList) {            System.out.println(item);        }        System.out.println("搜多到的条数:" + itemList.size());    }
    /**     * 使用 solrj  查询排序     */    @Test    public void testQueryOrder() throws SolrServerException {        //连接solr服务器、创建query对象、设置查询排序参数 、查询        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        SolrQuery query = new SolrQuery("title:手机");        /**设置排序源码         *  public SolrQuery setSort(String field, ORDER order) {         *     return setSort(new SortClause(field, order));         *   }         */        query.setSort("price", SolrQuery.ORDER.desc);        QueryResponse response = server.query(query);        //        List<Item> itemList = response.getBeans(Item.class);        for (Item item : itemList) {            System.out.println(item.toString());        }        System.out.println("搜索到的条数:" + itemList.size());    }
    /**     * 使用 solrj 高亮显示 testHighlightingQuery     * 1、set高亮标签,add高亮字段     * 2、高亮工具     */    @Test    public void testHighlightingQuery() throws SolrServerException {        //连接solr服务器、创建query对象、高亮、查询        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        SolrQuery query = new SolrQuery("title:手机");        // 标签、字段        query.setHighlightSimplePre("<em>");        query.setHighlightSimplePost("</em>");        query.addHighlightField("title");        //        QueryResponse response = server.query(query);        /**         *   高亮的响应结果  是一个双层map :         *   id  :对应id的高亮字段         *   高亮字段:高亮值  为list         */        Map<String, Map<String, List<String>>> map = response.getHighlighting();        /**         * 普通查询结果         */        List<Item> itemList = response.getBeans(Item.class);        for (Item item : itemList) {            System.out.println("id" + item.getId());            //  高亮值  为list            System.out.println("title" + map.get(item.getId()).get("title").get(0));            System.out.println("price" + item.getPrice());        }        System.out.println("搜索到的条数:" + itemList.size());    }
    /**     * 分页     * 1、准备参数     * 2、设置到query中     */    @Test    public void testPagedQuery() throws SolrServerException {        //连接solr服务器、创建query对象、设置查询排序参数 、查询        HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/core1");        SolrQuery query = new SolrQuery("title:手机");        // 设置分页        int currentPage = 2;        final int PAGE_SIZE = 4;        int start = (currentPage - 1) * PAGE_SIZE;        // 设置起始页,设置每页显示数目        query.setStart(start);        query.setRows(PAGE_SIZE);        //        QueryResponse response = server.query(query);        List<Item> itemList = response.getBeans(Item.class);        //展示数据        System.out.println("当前页:"+currentPage+"共查询数据:"+itemList.size());        for (Item item : itemList) {            System.out.println("数据:"+item.toString());        }    }
}===========================

 

posted @ 2020-08-01 11:11  DarJeely  阅读(618)  评论(0)    收藏  举报