SolrJ的使用

solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,

依赖

 <!--solr java客户端-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>4.10.3</version>
        </dependency>

spring.xml

    <!-- 单机版solr服务配置 -->
   <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
        <constructor-arg name="baseURL" value="http://127.0.0.1:8080/solr"/>
    </bean>
    <!-- 集群版solr服务 -->
    <!--<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">-->
        <!--<constructor-arg name="zkHost" value="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/>-->
        <!--<property name="defaultCollection" value="collection2"/>-->
    <!--</bean>-->

测试

package cn.zsp.ssm.controller;

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 org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

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

/**
 * @Description:
 * @Author: 张士鹏
 * @blog: http://blog.csdn.net/mixi9760
 * @CreateDate: 2017/4/1
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/applicationContext-*.xml", "classpath:spring/springmvc.xml"})
public class SolrJTest {
    @Autowired
    HttpSolrServer solrServer;

    /**
     * 创建索引/ 更新
     */
    @Test
    public void testCreateIndex() throws IOException, SolrServerException {
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "123456789");
        document.addField("item_price", 2000);
        document.addField("item_sell_point", "最好用的Android手机");
        document.addField("item_title", "一加5");
        solrServer.add(document);
        // 提交
        solrServer.commit();
    }

    /**
     * 删除
     */
    @Test
    public void testRemove() throws Exception {
        //根据id删除
        solrServer.deleteById("123456789");
        //根据多个id删除
        // solrServer.deleteById(ids);
        //自动查询条件删除
        // solrServer.deleteByQuery("product_keywords:教程");
        // 提交
        solrServer.commit();
    }

    /**
     * 查询
     */
    @Test
    public void testSearch() throws Exception {
        // 查询对象
        SolrQuery query = new SolrQuery();
        //设置查询条件,名称“q”是固定的且必须 的
        //搜索product_keywords域,product_keywords是复制域包括product_name和product_description
        //query.set("q", "item_title:一加");
        query.setQuery("item_title:一加");
        //过滤条件
        query.set("fq", "item_price:{* TO 3000}");
        //排序
        query.addSort("item_price", SolrQuery.ORDER.desc);
        // 分页参数
        // 每页显示记录数
        int pageSize = 2;
        // 当前页码
        int curPage = 1;

        // 开始记录下标
        int begin = pageSize * (curPage - 1);

        // 起始下标
        query.setStart(begin);
        // 结束下标
        query.setRows(pageSize);

        //高亮显示
        query.setHighlight(true);
        //设置高亮显示的域
        query.addHighlightField("item_title");
        //高亮显示前缀
        query.setHighlightSimplePre("<em style=\"color:red\">");
        //后缀
        query.setHighlightSimplePost("</em>");
        // 请求查询
        QueryResponse response = solrServer.query(query);

        // 查询结果
        SolrDocumentList docs = response.getResults();
        // 查询文档总数
        System.out.println("查询文档总数" + docs.getNumFound());

        for (SolrDocument doc : docs) {
            //商品主键
            String id = (String) doc.getFieldValue("id");
            //商品名称
            String product_name = (String) doc.getFieldValue("item_title");
            //商品价格
            Long product_price = (Long) doc.getFieldValue("item_price");

            System.out.println("=============================");
            System.out.println(id);
            System.out.println(product_name);
            System.out.println(product_price);
            // 高亮信息
            if (response.getHighlighting() != null) {
                if (response.getHighlighting().get(id) != null) {
                    Map<String, List<String>> map = response.getHighlighting()
                            .get(id);// 取出高亮片段

                    if (map.get("item_title") != null) {

                        for (String s : map.get("item_title")) {

                            System.out.println(s);

                        }

                    }
                }
            }


        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值