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

    如下:

  • 相关阅读:
    模板代码生成器 Template Code Creater
    Oracle编程入门经典 第2章 SQLPlus和基本查询
    Oracle编程入门经典 第5章 体系结构
    数据仓库
    C++ WINDOWS API 第1章 Windows 应用程序开发入门
    C++ WINDOWS API 第2章 Windows API概要
    Oracle编程入门经典 第7章 表
    单交换机VLAN虚拟局域网划分
    Oracle日志文件被误删除
    Oracle编程入门经典 第4章 新9i示例模式
  • 原文地址:https://www.cnblogs.com/Jason-Xiang/p/6401452.html
Copyright © 2011-2022 走看看