solrj的使用,环境准备,工程搭建,索引创建,添加修改索引,删除索引,查询

    xiaoxiao2021-03-25  58

    1      Solrj的使用

    1.1     什么是solrj

    Solrj是访问solr服务的java程序客户端。

     

    1.2     需求

    使用solrj调用solr服务实现对索引库的增删改查操作。

    1.3     环境准备

    l  Solr:4.10.3

    l  Jdk环境:1.7.0_72(solr4.10 不能使用jdk1.7以下

    l  Ide环境:eclipse indigo

    1.4     工程搭建

    1.4.1   第一步:创建java工程

    1.4.2   第二步:添加jar

    l  Solrj的包

    如上图:

    solr-solrj-4.10.3.jar是solr的核心包

    solrj-lib是solr的依赖包,若创建的是java工程,需要将solr-solrj-4.10.3.jar和solrj-lib中的包都添加到工程的lib包里面。

    l  Solr服务的其它依赖包

    1.5     代码实现

    1.5.1   添加\修改索引

    注意:在solr中添加和修改必须含有一个唯一主键,如果该主键已经存在,则进行修改操作,否则就执行添加操作

    @Test

       public void updateIndex() throws Exception {

          // 创建HttpSolrServer,可以访问solr服务

          // 参数就是solr服务的url

          HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr");

          // solr的文档对象

          SolrInputDocument doc = new SolrInputDocument();

          // 图书信息

          doc.addField("id", "8888");

          doc.addField("product_name", "solr编程思想");

          doc.addField("product_catalog", "99");

          doc.addField("product_catalog_name", "图书");

          doc.addField("product_price", "8888.00");

     

          // 执行添加操作,如果该id存在,则进行修改

          server.add(doc);

     

          // 提交

          server.commit();

       }

     

    1.5.2   删除索引

    @Test

       public void deleteIndex() throws Exception {

          // 创建HttpSolrServer,可以访问solr服务

          // 参数就是solr服务的url

          HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr");

     

          // 根据id删除

          // server.deleteById("8888");

          // 根据查询条件删除

          server.deleteByQuery("id:8888");

          // 全部删除、慎用!!!!

          // server.deleteByQuery("*:*");

          // 提交

          server.commit();

       }

     

    查询

    package cn.com.hbny.solr;

     

    import java.util.List;

    import java.util.Map;

     

    import org.apache.solr.client.solrj.SolrQuery;

    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.junit.Test;

     

    /**

     * @brief IndexManager.java

     * @attention 学习案例

     * @author toto

     * @date 2017年3月12日

     * @note begin modify by 修改人 修改时间  修改内容摘要说明

     */

    public class IndexSearch {

       

             @Test

             public void search() throws Exception {

                       //创建HttpSolrServer,可以访问solr服务

                       //参数就是solr服务的url

                       HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr");

                      

                       //创建solrQuery对象

                       SolrQuery query = new SolrQuery();

                       //设置q,查询条件

                       query.set("q", "product_name:小黄人");

                       //设置fg,过滤查询条件

                       query.set("fq", "product_catalog_name:幽默杂货");

                       //设置sort,排序

                       query.set("sort", "product_price desc");

                      

                       //设置start,rows,分页信息(写上默认值)

                       query.setStart(0);

                       query.setRows(10);

                      

                       //设置df

                       query.set("df", "product_keywords");

                      

                       //设置高亮

                       query.setHighlight(true);

                       query.addHighlightField("product_name");

                       query.setHighlightSimplePre("<font style=\"color:red\">");

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

                      

                       //执行搜索,并获得返回值

                       QueryResponse response = server.query(query);

                      

                      //根据查询条件匹配出的结果对象

                       SolrDocumentList list = response.getResults();

                       //匹配出的结果总数

                       long count = list.getNumFound();

                      

                       System.out.println("匹配出的结构总数:" + count);

                      

                       //获取高亮信息

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

                       for (SolrDocument solrDocument : list) {

                                System.out.println("商品id:" + solrDocument.get("id"));

                                System.out.println("商品名称:" + solrDocument.get("product_name"));

                                System.out.println("商品分类:" + solrDocument.get("product_catalog"));

                                System.out.println("商品分类名称:"

                                                   + solrDocument.get("product_catalog_name"));

                                System.out.println("商品价格:" + solrDocument.get("product_price"));

                                // System.out.println("商品描述:"+solrDocument.get("product_description"));

                                System.out.println("商品图片地址:" + solrDocument.get("product_picture"));

                               

                                List<String> list2 = highlighting.get(solrDocument.get("id")).get("product_name");

                                if(list2!=null){

                                         System.out.println("高亮后的信息:"+list2.get(0));

                                }

                       }

             }

    }

     

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

    最新回复(0)