admin管理员组

文章数量:1530859

5.在java项目中通过solrj操作solr索引

         在solr的发表包里找到apache-solr-solrj-4.0.0.jar和他的依赖包(solr/dist/solrj-lib目录下的jar包)拷贝到项目中,然后通过调用接口来实现java对solr索引的操作

5.1、插入索引

    public Booleaninsert_ap(Map<String,Object> data) throws Exception {

        //取得solr项目地址

        Stringurl="http://localhost:8080/solr"

        SolrServerserver=newHttpSolrServer(url);

        SolrInputDocumentdoc = newSolrInputDocument();

       

        //map中取值附到doc

        doc.setField("gjc1", data.get("GJC1"));

        doc.setField("id", data.get("DB_ID"));

        doc.setField("bt", data.get("BT"));

        doc.setField("zz", data.get("ZZ"));

        doc.setField("gjc", data.get("GJC"));

       doc.setField("zzywm", data.get("ZZYWM"));

        doc.setField("zzdw", data.get("ZZDW"));

        doc.setField("fk_xkfl", data.get("FK_XKFL"));

        doc.setField("fk_xkzy", "你好");

       

        server.add(doc);

        servermit();

        returntrue;

    }

5.2、删除索引

public Boolean deleteone(String id) throwsException{

        //根据主键ID删除索引

        Stringurl="http://localhost:8080/solr"

        SolrServerserver=newHttpSolrServer(url);

      

        UpdateResponseres= server.deleteById(id);    

        servermit();

        returnnull;

    }

5.3、更新一条记录的某个字段

public Boolean updateall(Map<String,Object> data) throws Exception { 

        Stringurl="http://localhost:8080/solr"

        SolrServerserver=newHttpSolrServer(url);

        Collection<SolrInputDocument>docs = newArrayList<SolrInputDocument>();

       

        SolrInputDocumentdoc = newSolrInputDocument();

        doc.setField("id", data.get("DB_ID"));

        Map<String,Object> ky = newHashMap<String, Object>();

             

        ky.put("set", data.get("YDCS"));

        doc.setField("ydcs", ky);

        docs.add(doc);

        server.add(docs);

        servermit();

       

        returntrue;

    }  

5.4、查询索引

public List<Map<String, Object>> allsearch(String words,String subwords,String sort,Integer countbegin,Integer countnum,Boolean quanwen) throws Exception {  

            Stringurl="http://localhost:8080/solr"

            SolrServerserver=newHttpSolrServer(url);

           SolrQuery query = new SolrQuery();

          

           //主查询字符串

           query.setQuery("content:"+words);

           

        //开启高亮

        query.setHighlight(true);

        //设置高亮字段例如:标题  作者摘要

        query.addHighlightField("bt zz");

        //高亮词前方的添加代码

        query.setHighlightSimplePre("<span class='span_key'>");             

        //高亮词后方的添加代码

        query.setHighlightSimplePost("</span>");

             

         //子查询条件           

        query.addFilterQuery("bt:('物流') AND zz:('小刘')");

        query.addFilterQuery("lysjk:(-ap)");

 

         //区间查询   例如:下载次数(xzcs)从1100

         query.addFacetField("xzcs:[1 to100]");

          

        //结果排序例如:按照阅读次数(ydcs)降序排序

        query.addSortField(sort, ORDER.desc);

                   

           //分页返回结果例如:0条开始返回前10条记录

           query.setStart(0);

           query.setRows(10);

              

           //solr发送查询请求和条件

           QueryResponse response = server.query(query);

 

 

           //调用solr返回查询结果

           SolrDocumentList docs = response.getResults();

 

           //调用solr返回查询结果的高亮结果

          Map<String,Map<String,List<String>>> map = response.getHighlighting();

           //返回结果数量

           longcount= docs.getNumFound();

           if (count== 0){

               returnnull;

           }

           //查询耗时单位:毫秒

           //int timecost= response.getQTime();

          

           //循环取数据

           List <Map<String,Object>> returnlist= newArrayList<Map<String, Object>>();

           for(inti=0;i<docs.size();i++){            

               SolrDocument d=docs.get(i);

               Map<String,Object> onedata = newHashMap<String,Object>();

               onedata.put("id",(String) d.get("id"));

               onedata.put("lysjk",substrin(d.getFieldValue("lysjk")));

               onedata.put("fbrq",d.getFieldValue("fbrq"));

               onedata.put("sccs",d.getFieldValue("sccs"));

     

               //标题

               if (map.get(d.get("id")).get("bt") == null){

                   onedata.put("bt",substrin(d.getFieldValue("bt")));

               }else{

                   //有高亮的字段,从高亮的map中取数据

                   onedata.put("bt",substrin(map.get(d.get("id")).get("bt")));

               }

             

     

               //作者

               String zz = "";

               if (map.get(d.get("id")).get("zz") == null){

                   zz = substrin(d.getFieldValue("zz"));

                   onedata.put("zz",separatestring(zz));

               }else{

                   zz = substrin(map.get(d.get("id")).get("zz"));

                   onedata.put("zz",separatestring(zz));

               }

              

               //摘要

               if (map.get(d.get("id")).get("zy") == null){

                   onedata.put("zy",substrin(d.getFieldValue("zy")));

               }else{

                   onedata.put("zy",substrin(map.get(d.get("id")).get("zy")));

               }

               returnlist.add(onedata);                      

           }

           Map<String,Object> countnumber = newHashMap<String,Object>();

           countnumber.put("countnumber",count);

           returnlist.add(countnumber);

           returnreturnlist;

    }

本文标签: 搜索引擎solr