sorl 6.5.1的solrj的常规使用

来源:互联网 发布:c#windows窗体程序设计 编辑:程序博客网 时间:2024/06/06 02:58

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的常规使用见最近的几篇文章。

0 0