Solrj的使用

2 篇文章 0 订阅
1 篇文章 0 订阅

Solrj的说明:

用于访问solr的java客户端程序,提供了操作solr服务的增删改查方法。

maven依赖:

<dependencies>
        <!-- solr-solrj -->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>4.10.3</version>
        </dependency>
        <!-- commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

代码实现:

package com.hengsheng.demo;

import com.itheima.entity.Product;
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.junit.Test;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author:DYB.
 * @Date :Created in 2018/9/3 9:09
 */
public class SolrText {

    private SolrServer solrServer = new HttpSolrServer("http://localhost:8088/solr/collection1");

    @Test
    /*添加或修改的solr的方法,存在就修改,不存在就添加(根据id)*/
    public void testSolrText() throws IOException, SolrServerException {
        Product product = new Product();
        product.setPid("8000");
        product.setName("iphone6s");
        product.setCatalogName("手机");
        product.setPrice(9999);
        product.setDescription("西瓜");
        product.setPicture("126.jpg");

        solrServer.addBean(product);
        solrServer.commit();
    }

    @Test
    /*根据id删除solr内容*/
    public void testSolrUpdate() throws Exception{
        solrServer.deleteById("20");
        solrServer.commit();
    }

    @Test
    /*删除所有,也可以自己指定条件*/
    public void testSolrTextB() throws Exception{
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }

    @Test
    /*查询全部内容*/
    public void testSolrTextC() throws Exception {
        //创建solrQuery封装查询条件
        SolrQuery sq = new SolrQuery("*:*");
        //执行搜索,得到查询响应对象
        QueryResponse response = solrServer.query(sq);
        System.out.println("搜索到的总数量:"+response.getResults().getNumFound());
        //获取搜索结果,并转化成实体类集合
        List<Product> products = response.getBeans(Product.class);
        for (Product product : products) {
            System.out.println("<---------分割线-------->");
            System.out.println(product);
        }
    }


    @Test
    /*复杂查询*/
    public void testSolrTextD() throws Exception {
        //创建SolrQuery封装查询对象
        SolrQuery sq = new SolrQuery();

        //setQuery:封装查询条件
        sq.setQuery("name:彩色");

        //addFilterQuery:添加过滤条件
        sq.addFilterQuery("price:[10 TO 20]");

        //addSort:添加排序条件
        sq.addSort("price", SolrQuery.ORDER.desc);

        //setStart:设置分页开始记录数 与limit的每个问号参数相同
        sq.setStart(0);

        //设置每页显示记录数
        sq.setRows(5);

        //设置搜索需要返回的域(默认返回的是全部)
        sq.setFields("pid,name,price");

        //设置开启高亮显示
        sq.setHighlight(true);
        //设置高亮格式前缀
        sq.setHighlightSimplePre("<font color='red'>");
        //设置高亮显示后缀
        sq.setHighlightSimplePost("</font>");

        //执行搜索,得到查询响应对象
        QueryResponse response = solrServer.query(sq);
        System.out.println("搜索到的总数量:"+response.getResults().getNumFound());

        //通过泛型方法getBeans<T>得到Product集合对象
        List<Product> products = response.getBeans(Product.class);

        //通过getHighlighting得到高亮显示的集合
        Map<String, Map<String, List<String>>> map = response.getHighlighting();
        //循环遍历集合对象,封装高亮显示的集合
        for (Product product : products) {
            Map<String, List<String>> mapA = map.get(product.getPid());
            String keywords = mapA.get("keywords").get(0);
            product.setName(keywords);
            System.out.println(product);
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值