zoukankan      html  css  js  c++  java
  • solrj的使用

    Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互,最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。

    使用代码

    public class solrJTest {
    
        // solr url
        public static final String solrURL = "http://localhost:8080/solr";
        // solr core名称
        public static final String coreName = "coretest";
    
        @Test
        public void main() {
    
            // queryById("1");
            // query("*:*", "", 1, 3);
            // add();
            // update();
            // delete();
        }
    
        /**
         * 方法描述: [测试通过id查询solr数据]</br>
         * 初始作者: xiangzhenhai<br/>
         * 创建日期: 2017年2月15日-上午11:07:24<br/>
         * 开始版本: 1.0.0<br/>
         */
        public void queryById(String id) {
    
            try {
                SolrClient client = new HttpSolrClient(solrURL);
                SolrDocument solrDocument = client.getById(coreName, id);
                System.out.println(JSONObject.toJSON(solrDocument));
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 方法描述: [测试设置搜索条件,查询数据]</br>
         * 初始作者: xiangzhenhai<br/>
         * 创建日期: 2017年2月15日-上午11:36:19<br/>
         * 开始版本: 1.0.0<br/>
         */
        public void query(String query, String fq, Integer start, Integer rows) {
    
            SolrQuery solrQuery = new SolrQuery();
    
            // 设置搜索内容
            solrQuery.setQuery(query);
            // 设置过虑条件
            solrQuery.addFilterQuery(fq);
            // 设置起始位置和搜索结果数量
            solrQuery.setRows(rows);
            solrQuery.setStart(start);
            // 设置搜索结果排序
            solrQuery.addSort("sort", SolrQuery.ORDER.desc);
    
            // 搜索数据
            try {
                SolrClient client = new HttpSolrClient(solrURL);
                QueryResponse response = client.query(coreName, solrQuery);
                SolrDocumentList docs = response.getResults();
    
                System.out.println("文档个数:" + docs.getNumFound());
                System.out.println("查询时间:" + response.getQTime());
                for (SolrDocument doc : docs) {
                    System.out.println("id: " + doc.getFieldValue("id") + "      content: " + doc.getFieldValue("context"));
                }
    
                // 通过bean获取搜索结果(需要创建实体类)
                // List<SolrtestBean> list = response.getBeans(SolrtestBean.class);
    
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 方法描述: [测试写入数据到solr]</br>
         * 初始作者: xiangzhenhai<br/>
         * 创建日期: 2017年2月15日-上午11:43:03<br/>
         * 开始版本: 1.0.0<br/>
         */
        public void add() {
    
            SolrClient client = new HttpSolrClient(solrURL + "/" + coreName);
    
            // 单条数据写入
            SolrInputDocument doc = new SolrInputDocument();
    
            doc.addField("id", "1");
            doc.addField("context", "单条数据写入");
            doc.addField("updateTime", new Date());
            doc.addField("sort", 1);
    
            // 单条数据通过实体类写入
            // SolrtestBean bean = new SolrtestBean();
            // bean.setContext("333333333");
            // bean.setId("8");
    
            try {
                UpdateResponse rspDoc = client.add(doc);
                // UpdateResponse rsp = client.addBean(bean);
                System.out.println("UpdateResponse result:" + rspDoc.getStatus() + " Qtime:" + rspDoc.getQTime());
                UpdateResponse rspcommit = client.commit();
                System.out.println(
                        "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime());
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            // 多条数据写入
            List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>();
            SolrInputDocument doc1 = new SolrInputDocument();
            doc1.addField("id", "2");
            doc1.addField("context", "多条数据写入");
            doc1.addField("updateTime", new Date());
            doc1.addField("sort", 2);
            docList.add(doc);
    
            // 多条数据通过实体类写入
            // List<SolrtestBean> beanList = new ArrayList<SolrtestBean>();
            // SolrtestBean bean = new SolrtestBean();
            // bean.setContext("333333333");
            // bean.setId("8");
            // beanList.add(bean);
    
            try {
                UpdateResponse rspDocs = client.add(docList);
                // UpdateResponse rspDocs = client.addBeans(beanList);
                System.out.println("UpdateResponse result:" + rspDocs.getStatus() + " Qtime:" + rspDocs.getQTime());
                UpdateResponse rspcommit = client.commit();
                System.out.println(
                        "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime());
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 方法描述: [测试更新solr数据]</br>
         * 初始作者: xiangzhenhai<br/>
         * 创建日期: 2017年2月15日-上午11:59:30<br/>
         * 开始版本: 1.0.0<br/>
         */
        public void update() {
            SolrClient client = new HttpSolrClient(solrURL + "/" + coreName);
    
            // 这里只给出单条数据更新测试,多条数据更新与多条数据写入相似,就不写了
            // 更新参数说明:set–更新一个字段,add–添加一个字段,inc–在原有值的基础上增加
            SolrInputDocument doc = new SolrInputDocument();
            Map<String, Object> contextMap = new HashMap<String, Object>();
            contextMap.put("set", "更新后的context");
            Map<String, Object> sortMap = new HashMap<String, Object>();
            sortMap.put("inc", 3);
    
            doc.addField("id", "1");
            doc.addField("context", contextMap);
            doc.addField("sort", sortMap);
    
            try {
                UpdateResponse rspDoc = client.add(doc);
                System.out.println("UpdateResponse result:" + rspDoc.getStatus() + " Qtime:" + rspDoc.getQTime());
                UpdateResponse rspcommit = client.commit();
                System.out.println(
                        "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime());
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 方法描述: [测试删除solr数据]</br>
         * 初始作者: xiangzhenhai<br/>
         * 创建日期: 2017年2月15日-下午2:39:38<br/>
         * 开始版本: 1.0.0<br/>
         */
        public void delete() {
            try {
    
                SolrClient client = new HttpSolrClient(solrURL + "/" + coreName);
    
                // 根据id删除solr数据
                client.deleteById("1");
    
                // 根据query删除solr数据,这里删除context含有"测试"的solr数据(前提是已经添加中文分词器,否则只会删除context为"测试"的solr数据)
                client.deleteByQuery("context:测试");
    
                client.commit();
    
            } catch (SolrServerException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    如下:

  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6401452.html
Copyright © 2011-2022 走看看