solr 搜索引擎搭建和使用 (三)

    xiaoxiao2021-11-29  23

    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);

            server.commit();

            returntrue;

        }

    5.2、删除索引

    public Boolean deleteone(String id) throwsException{

            //根据主键ID删除索引

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

            SolrServerserver=newHttpSolrServer(url);

          

            UpdateResponseres= server.deleteById(id);    

            server.commit();

            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);

            server.commit();

           

            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;

        }

    转载请注明原文地址: https://ju.6miu.com/read-678818.html

    最新回复(0)