sorl 6.5.1的solrj的常规使用

sorl 6.5.1的solrj的常规使用

前言

  • 使用java代码和solr做交互处理,就需要solrj的使用了。最近工作偏忙,有时间做出了基础版的solrj的使用。供大家参考。
  • 大部分solrj的网络文章包括solr的wiki,都讲对象指向了HttpSolrServer,但solr的6.5.x的版本却怎么也找不到这个方法,使用的是HttpSolrClient,功能体验差不多。
  • 下面贴出代码,基础应用应该是没问题。

 package cn.rusth.solr.FirstExample;

import cn.rusth.properties.PropertiesReader;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
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.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.servlet.SolrRequestParsers;

import java.util.*;

/**
 * solrclient测试类
 * <br>基础功能测试
 * Created by rusth on 2017/5/9.
 */
public class HttpSolrClientTest {

    private HttpSolrClient client;

    public HttpSolrClientTest() {
        String url = PropertiesReader.read("/config/config.properties", "solr_url");
        System.out.println("url=" + url);
        client = new HttpSolrClient(url);
    }

    /**
     * 增加和更新索引
     * @throws Exception
     */
    public void insertDataToSolr() throws Exception {
        SolrInputDocument input = new SolrInputDocument();
        input.addField("id", "1761",1.0f);
        input.addField("goods_id", "7510");//不用_s的方式,配置文件已经进行了配置,无需此操作
        input.addField("name", "爱韩寒");
        client.add(input);//如果不存在就新增,存在就更新
        //不能忘记提交
        client.commit();
    }

    /**
     * 删除索引
     * @throws Exception
     */
    public void deleteSolrIndex()throws Exception{
        UpdateResponse result= client.deleteById("1755");
        System.out.println(result.getStatus());
        System.out.println(result.toString());
        client.commit();
    }

    /**
     * 借助SolrRequestParsers解析“检索字符串”进行检索
     * @param queryString
     * @return
     * @throws Exception
     */
    public String querySolr01(String queryString) throws Exception {
        SolrParams solrParams = SolrRequestParsers
                .parseQueryString(queryString);//直接使用有bug
        try {
            QueryResponse queryResponse = client.query(solrParams);
            List<Goods> results = queryResponse.getBeans(Goods.class);
            System.out.println(results.toString());
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查询
     *借助ModifiableSolrParams对象接收查询条件进行检索
     * @param queryString
     * @return
     * @throws Exception
     */
    public List querySolr02(String queryString) throws Exception {
        List<Goods> list=new ArrayList<Goods>();
        ModifiableSolrParams solrParams = new ModifiableSolrParams();
        solrParams.add("q", queryString);
        solrParams.add("start", "0");
        solrParams.add("rows", "10");
        QueryResponse queryResponse = client.query(solrParams);
        /**
         * 返回值数据
         * {responseHeader={status=0,QTime=0,params={q=name:"韩",start=0,rows=10,wt=javabin,version=2}},
         * response={numFound=4,start=0,docs=[SolrDocument{id=1734, name=韩寒, _version_=1566910655055790080},
         * SolrDocument{id=1741, name=韩韩, _version_=1566911251160760320},
         * SolrDocument{id=1755, goods_id=7510, name=韩松, _version_=1566989989370134528},
         * SolrDocument{id=1761, goods_id=7510, name=爱韩寒, _version_=1566991216722051072}]}}
         */
        SolrDocumentList documents= queryResponse.getResults();//SolrDocumentList继承于 ArrayList<SolrDocument>
        System.out.println("numFound="+documents.getNumFound());
        System.out.println("start="+documents.getStart());
        Iterator iterator=  documents.iterator();
        while(iterator.hasNext()){
            SolrDocument solrDocument=(SolrDocument)iterator.next();
            Goods g=new Goods();
            g.setGoods_id(solrDocument.get("goods_id")!=null?Integer.parseInt(solrDocument.get("goods_id").toString()):0);
            g.setName(solrDocument.get("name")!=null?solrDocument.get("name").toString():"");
            list.add(g);//构建对象
        }
        return null;
    }

    /**
     * 借助solrQuery对象接收查询条件进行检索
     * @param queryString
     * @return
     * @throws Exception
     */
    public String querySolr03(String queryString) throws Exception{
        SolrQuery query = new SolrQuery();
        query.setQuery(queryString);
        query.setStart(0);
        query.setRows(10);
        QueryResponse queryResponse;
        try {
            queryResponse = client.query(query);
            System.out.println(queryResponse.toString());
        } catch (SolrServerException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
        HttpSolrClientTest httpService = new HttpSolrClientTest();
        try {
//            httpService.insertDataToSolr();
            httpService.querySolr02("name:\"韩\"");//直接搜索 不用加*匹配
//            httpService.deleteSolrIndex();//删除
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如果有字段无法添加到solr则代表的是此字段没有在solr中配置。
在solrhome下找到core的目录 (如rusth)的conf,修改里面的managed-schema文件。
在对应的字段下,增加想要的属性。
这里写图片描述
和下面的
这里写图片描述
然后重启tomcat即,新增数据,查询看看。

不要在意细节。具体看功能的实现。主要方法位于querySolr02。querySolr01有bug,欢迎高手补充使用方式。
后续,有时间的情况下,会继续扩充使用方式的。

solr 6.5.1的常规使用见最近的几篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值