solr 在Java中的使用

//先创建一个实体,省略get, set 方法

public class Project{

    @Field(value = "id")
    private String id;
    @Field(value = "title")
    private String title;
    @Field(value = "description")
    private String description;
    @Field(value = "number")
    private String number;
}
//    指定solr服务器的地址
private final static String SOLR_URL = "http://localhost:8180/solr/";

/**
 * 创建SolrServer对象
 * <p>
 * 该对象有两个可以使用,都是线程安全的
 * 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的
 * 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了
 * 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient
 *
 * @return
 */
public static SolrClient createSolrServer(String core) {
    SolrClient solr = new HttpSolrClient.Builder(SOLR_URL + core)
            .withConnectionTimeout(10000)
            .withSocketTimeout(1000).build();
    return solr;
}
 public static void solrQueryTest(String core) {
        SolrClient solrClient = createSolrServer(core);

        SolrQuery query = new SolrQuery();
        query.add("q", "*:*"); // 查询的
        query.addFilterQuery("title:测试");  // 通过某个功能呢过滤
//        solrQuery.addFilterQuery("id:[10000004119 TO 10000004128]");  // 查询的筛选条件, 限定一定范围
        query.addField("id")
                .addField("title")
                .addField("description")
                .addField("number")
                .setSort("id", SolrQuery.ORDER.desc) // 排序
                .setRows(10); // 显示的行

        //参数hl,设置高亮
//        query.setHighlight(true);
//        //设置高亮的字段
//        query.addHighlightField("title");
//        //设置高亮的样式
//        query.setHighlightSimplePre("<font color='red'>");


        try {
            QueryResponse response = solrClient.query(query);

            SolrDocumentList documents = response.getResults();
            long numFound = documents.getNumFound();
            System.out.println(numFound);
            for (SolrDocument item : documents) {
                Object id = item.getFieldValue("id");
                String title = (String) item.getFieldValue("title");
                String description = (String) item.getFieldValue("description");
                String number = (String) item.getFirstValue("number");

                System.out.println("id:" + id + " title:" + title + " description: " + description + " number:" + number);
            }

            System.out.println("**********************************");
            // 搜索的结果转换成实体
            List<Project> beans = response.getBeans(Project.class);
            for (Project item : beans) {
                System.out.println("id:" + item.getId() + " title:" + item.getTitle() + " description: " + item.getDescription() + " number:" + item.getNumber());
            }


        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

SolrQuery sq=new SolrQuery();

1、多条件查询

//设置查询条件

sq.set("q","item_title:3 AND item_desc:东西 OR item_sell_point:好看" );

2、设置过滤条件

//设置过滤条件 sq.set("fq", "item_price:[1 TO 20]");

3、设置排序

//设置排序

sq.addSort("item_title", ORDER.desc);

4、设置分页

//设置分页

sq.setStart(0);//开始位置 sq.setRows(3);//每页3条

public static void queryDocument() throws Exception{
        //创建Solr的客户端链接对象
        HttpSolrServer solrServer=new HttpSolrServer("http://192.168.6.179:8080/solr/collection1");
        //创建solr的查询对象
        SolrQuery sq=new SolrQuery();
        //设置查询条件
        sq.set("q","item_title:商品" );
        //设置过滤条件
    //    sq.set("fq", "item_price:[1 TO 20]");
        //设置排序
        sq.addSort("item_title", ORDER.desc);
        //设置分页
        sq.setStart(0);//开始位置
        sq.setRows(3);//每页3条
        
        //开启高亮
        sq.setHighlight(true);
        sq.addHighlightField("item_title");//设置高亮域
        sq.setHighlightSimplePre("<b>");//设置高亮样式
        sq.setHighlightSimplePost("</b>");
        //查询
        QueryResponse qr=solrServer.query(sq);
        //获取查询结果
        SolrDocumentList sds=qr.getResults();
        //获取查询的记录数
        long total=sds.getNumFound();
        System.out.println("数量:"+total);
        for(SolrDocument sd:sds){//默认取出10条记录
            String id=(String) sd.getFieldValue("id");
            String item_title=(String) sd.getFieldValue("item_title");
            String item_sell_point=(String) sd.getFieldValue("item_sell_point");
            long item_price=(Long) sd.getFieldValue("item_price");
            String item_desc=(String) sd.getFieldValue("item_desc");
            String item_image=(String) sd.getFieldValue("item_image");
            String item_category_name=(String) sd.getFieldValue("item_category_name");
            System.out.println("========================================");
            System.out.println("id:"+id);
            System.out.println("item_title:"+item_title);
            System.out.println("item_sell_point:"+item_sell_point);
            System.out.println("item_price:"+item_price);
            System.out.println("item_desc:"+item_desc);
            System.out.println("item_image:"+item_image);
            System.out.println("item_category_name:"+item_category_name);
            //获取高亮显示的结构
            Map<String, Map<String, List<String>>> highlighting=qr.getHighlighting();
            if(highlighting!=null){
                //根据Id获得每个域的高亮内容
                Map<String, List<String>> map=highlighting.get(id);
                //根据具体的域获取高亮内容
                List<String> list=map.get("item_title");
                if(list!=null && !list.isEmpty()){
                    for(String str:list){
                        System.out.println("str:"+str);
                    }
                }
            }
        }
    }
/**
 * 添加
 * @param core
 */
public static void addDocument(String core) {
    SolrClient solrClient = createSolrServer(core);
    List<Project> projects = new ArrayList<Project>();
    Project project = new Project();
    project.setId("1");
    project.setTitle("大数据处理权威指南");
    project.setDescription("清华大学出版社");
    project.setNumber("1633");
    projects.add(project);
    Project project2 = new Project();
    project2.setId("2");
    project2.setTitle("深入RabbitMq");
    project2.setDescription("第二版");
    project2.setNumber("1634");
    projects.add(project2);

    try {
        solrClient.addBeans(projects);
        solrClient.commit();
        solrClient.close();
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }


}

/**
 * 删除
 * @param core
 */
public static void delDocument(String core) {
    SolrClient solrClient = createSolrServer(core);
    try {
        solrClient.deleteById("2");
        solrClient.commit();
        solrClient.commit();
    } catch (SolrServerException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}


/**
 * 更新
 * @param core
 */
public static void updDocument(String core) {
    SolrClient solrClient = createSolrServer(core);
    Project project = new Project();
    project.setId("1");  // 有id 就是更新, 没有ID,就是添加
    project.setTitle("大数据处理权威指南22");
    project.setDescription("清华大学出版社");
    project.setNumber("1633");
    try {
        UpdateResponse updateResponse = solrClient.addBean(project);
        solrClient.commit();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (SolrServerException e) {
        e.printStackTrace();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值