solr示例程序

原创 2015年07月08日 15:05:01

简介

SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。

SolrJ/Solr 跨版本兼容性

SolrJ通常向后保持兼容性,可以使用新版本的SolrJ访问较旧的Solr,反之亦然。建议使用同Solr server同版本的SolrJ,

详见 http://wiki.apache.org/solr/Solrj 中关于兼容性的描述。

示例代码

  •    采用 SolrInputDocument对象 增加、删除索引
  • import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.common.SolrInputDocument;
    
    public class AddDocsDemo {
      public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
    
      public static void main(String[] args) {
        //通过浏览器查看结果
        //http://172.168.63.233:8983/solr/collection1/select?q=name%3A%E6%94%B9%E9%9D%A9&wt=json&indent=true
        //AddDocs();
        delDocs();
      }
    
      public static void AddDocs() {
        String[] words = { "中央全面深化改革领导小组", "第四次会议", "审议了国企薪酬制度改革", "考试招生制度改革",
            "传统媒体与新媒体融合等", "相关内容文件", "习近平强调要", "逐步规范国有企业收入分配秩序",
            "实现薪酬水平适当", "结构合理、管理规范、监督有效", "对不合理的偏高", "过高收入进行调整",
            "深化考试招生制度改革", "总的目标是形成分类考试", "综合评价", "多元录取的考试招生模式", "健全促进公平",
            "科学选才", "监督有力的体制机制", "着力打造一批形态多样", "手段先进", "具有竞争力的新型主流媒体",
            "建成几家拥有强大实力和传播力", "公信力", "影响力的新型媒体集团" };
        long start = System.currentTimeMillis();
        Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        for (int i = 1; i < 300; i++) {
          SolrInputDocument doc1 = new SolrInputDocument();
          doc1.addField("id", "id" + i, 1.0f);
          doc1.addField("name", words[i % 21], 1.0f);
          doc1.addField("price", 10 * i);
          docs.add(doc1);
        }
        try {
          HttpSolrServer server = new HttpSolrServer(SOLR_URL);
          // 可以通过三种方式增加docs,其中server.add(docs.iterator())效率最高
          // 增加后通过执行commit函数commit (936ms)
    //			 server.add(docs);
    //			 server.commit();
    
          // 增加doc后立即commit (946ms)
    //			 UpdateRequest req = new UpdateRequest();
    //			 req.setAction(ACTION.COMMIT, false, false);
    //			 req.add(docs);
    //			 UpdateResponse rsp = req.process(server);
    
          // the most optimal way of updating all your docs 
          // in one http request(432ms)
          server.add(docs.iterator());
        } catch (Exception e) {
          System.out.println(e);
        }
        System.out.println("time elapsed(ms):"
            + (System.currentTimeMillis() - start));
      }
    
      public static void delDocs() {
        long start = System.currentTimeMillis();
        try {
          HttpSolrServer server = new HttpSolrServer(SOLR_URL);
          List<String> ids = new ArrayList<String>();
          for (int i = 1; i < 300; i++) {
            ids.add("id" + i);
          }
          server.deleteById(ids);
          server.commit();
        } catch (Exception e) {
          System.out.println(e);
        }
        System.out.println("time elapsed(ms):"
            + (System.currentTimeMillis() - start));
      }
    }
  •     采用POJOs增加、删除索引
  • import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.List;
    import java.util.Random;
    
    import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
    import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.common.SolrInputDocument;
    
    public class AddBeansDemo {
      public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
    
      public static void main(String[] args) {
        // 通过浏览器查看结果
        // 要保证bean中各属性的名称在conf/schema.xml中存在,如果查询,要保存被索引
        // http://172.168.63.233:8983/solr/collection1/select?q=description%3A%E6%94%B9%E9%9D%A9&wt=json&indent=true
    //		delBeans();
        AddBeans();
      }
    
      public static Random rand = new Random(47);
      public static String[] authors = { "张三", "李四", "王五", "赵六", "张飞", "刘备",
          "关云长" };
      public static String[] links = {
          "http://repository.sonatype.org/content/sites/forge-sites/m2e/",
          "http://news.ifeng.com/a/20140818/41626965_0.shtml",
          "http://news.ifeng.com/a/20140819/41631363_0.shtml?wratingModule_1_9_1",
          "http://news.ifeng.com/topic/19382/",
          "http://news.ifeng.com/topic/19644/" };
    
      public static String genAuthors() {
        List<String> list = Arrays.asList(authors).subList(0, rand.nextInt(7));
        String str = "";
        for (String tmp : list) {
          str += " " + tmp;
        }
        return str;
      }
    
      public static List<String> genLinks() {
        return Arrays.asList(links).subList(0, rand.nextInt(5));
      }
    
      public static void AddBeans() {
        String[] words = { "中央全面深化改革领导小组", "第四次会议", "审议了国企薪酬制度改革", "考试招生制度改革",
            "传统媒体与新媒体融合等", "相关内容文件", "习近平强调要", "逐步规范国有企业收入分配秩序",
            "实现薪酬水平适当", "结构合理、管理规范、监督有效", "对不合理的偏高", "过高收入进行调整",
            "深化考试招生制度改革", "总的目标是形成分类考试", "综合评价", "多元录取的考试招生模式", "健全促进公平",
            "科学选才", "监督有力的体制机制", "着力打造一批形态多样", "手段先进", "具有竞争力的新型主流媒体",
            "建成几家拥有强大实力和传播力", "公信力", "影响力的新型媒体集团" };
    
        long start = System.currentTimeMillis();
        Collection<NewsBean> docs = new ArrayList<NewsBean>();
    //		DocumentObjectBinder binder = new DocumentObjectBinder();
        for (int i = 1; i < 300; i++) {
          NewsBean news = new NewsBean();
          news.setId("id" + i);
          news.setName("news" + i);
          news.setAuthor(genAuthors());
          news.setDescription(words[i % 21]);
          news.setRelatedLinks(genLinks());
    //			SolrInputDocument doc1 = binder.toSolrInputDocument(news);
          docs.add(news);
        }
        try {
          HttpSolrServer server = new HttpSolrServer(SOLR_URL);
          server.setRequestWriter(new BinaryRequestWriter());
          // 可以通过二种方式增加docs,其中server.add(docs.iterator())效率最高
          // 增加后通过执行commit函数commit (981ms)
          // server.addBeans(docs);
          // server.commit();
    
          // the most optimal way of updating all your docs
          // in one http request(481ms)
          server.addBeans(docs.iterator());
          server.optimize(); //time elasped 1176ms
        } catch (Exception e) {
          System.out.println(e);
        }
        System.out.println("time elapsed(ms):"
            + (System.currentTimeMillis() - start));
      }
    
      public static void delBeans() {
        long start = System.currentTimeMillis();
        try {
          HttpSolrServer server = new HttpSolrServer(SOLR_URL);
          List<String> ids = new ArrayList<String>();
          for (int i = 1; i < 300; i++) {
            ids.add("id" + i);
          }
          server.deleteById(ids);
          server.commit();
        } catch (Exception e) {
          System.out.println(e);
        }
        System.out.println("time elapsed(ms):"
            + (System.currentTimeMillis() - start));
      }
    }
    import java.util.List;
    
    import org.apache.solr.client.solrj.beans.Field;
    
    class NewsBean {
      @Field
      private String id;
    
      @Field
      private String name;
    
      @Field
      private String author;
    
      @Field
      private String description;
    
      @Field("links")
      private List<String> relatedLinks;
      
      public NewsBean(){
        
      }
    
      public String getId() {
        return id;
      }
    
      public void setId(String id) {
        this.id = id;
      }
    
      
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public String getAuthor() {
        return author;
      }
    
      public void setAuthor(String author) {
        this.author = author;
      }
    
      public String getDescription() {
        return description;
      }
    
      public void setDescription(String description) {
        this.description = description;
      }
    
      public List<String> getRelatedLinks() {
        return relatedLinks;
      }
    
      public void setRelatedLinks(List<String> relatedLinks) {
        this.relatedLinks = relatedLinks;
      }
    }
  •     普通方式处理查询结果
  • import java.io.IOException;
    
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrQuery.ORDER;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.client.solrj.impl.XMLResponseParser;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    
    public class QueryDocsDemo {
    //	public static final String SOLR_URL = "http://192.168.230.128:8983/solr";
      public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
    
      public static void main(String[] args) throws SolrServerException, IOException {
        HttpSolrServer server = new HttpSolrServer(SOLR_URL);
        server.setMaxRetries(1);
        server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
        server.setConnectionTimeout(5000); // 5 seconds to establish TCP
        //正常情况下,以下参数无须设置
        //使用老版本solrj操作新版本的solr时,因为两个版本的javabin incompatible,所以需要设置Parser
        server.setParser(new XMLResponseParser());
        server.setSoTimeout(1000); // socket read timeout
        server.setDefaultMaxConnectionsPerHost(100);
        server.setMaxTotalConnections(100);
        server.setFollowRedirects(false); // defaults to false
        // allowCompression defaults to false.
        // Server side must support gzip or deflate for this to have any effect.
        server.setAllowCompression(true);
    
        //使用ModifiableSolrParams传递参数
    //		ModifiableSolrParams params = new ModifiableSolrParams();
    //		// 192.168.230.128:8983/solr/select?q=video&fl=id,name,price&sort=price asc&start=0&rows=2&wt=json
    //		// 设置参数,实现上面URL中的参数配置
    //		// 查询关键词
    //		params.set("q", "video");
    //		// 返回信息
    //		params.set("fl", "id,name,price,score");
    //		// 排序
    //		params.set("sort", "price asc");
    //		// 分页,start=0就是从0开始,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了
    //		params.set("start", 2);
    //		params.set("rows", 2);
    //		// 返回格式
    //		params.set("wt", "javabin");
    //		QueryResponse response = server.query(params);
    
        //使用SolrQuery传递参数,SolrQuery的封装性更好
        server.setRequestWriter(new BinaryRequestWriter());
        SolrQuery query = new SolrQuery();
        query.setQuery("video");
        query.setFields("id","name","price","score");
        query.setSort("price", ORDER.asc);
        query.setStart(0);
        query.setRows(2);
    //		query.setRequestHandler("/select");
        QueryResponse response = server.query( query );
        
        
        
        // 搜索得到的结果数
        System.out.println("Find:" + response.getResults().getNumFound());
        // 输出结果
        int iRow = 1;
        for (SolrDocument doc : response.getResults()) {
          System.out.println("----------" + iRow + "------------");
          System.out.println("id: " + doc.getFieldValue("id").toString());
          System.out.println("name: " + doc.getFieldValue("name").toString());
          System.out.println("price: "
              + doc.getFieldValue("price").toString());
          System.out.println("score: " + doc.getFieldValue("score"));
          iRow++;
        }
      }
    }
  •     采用POJOs方式处理查询结果
  • import java.io.IOException;
    import java.util.List;
    
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrQuery.ORDER;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
    import org.apache.solr.client.solrj.impl.HttpSolrServer;
    import org.apache.solr.client.solrj.response.FacetField;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrDocumentList;
    
    public class QueryBeanDemo {
      public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
    
      public static void main(String[] args) throws SolrServerException,
          IOException {
        // http://172.168.63.233:8983/solr/collection1/select?q=description%3A%E6%80%BB%E7%9B%AE%E6%A0%87&facet=true&facet.field=author_s
        HttpSolrServer server = new HttpSolrServer(SOLR_URL);
        server.setMaxRetries(1);
        server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
        server.setConnectionTimeout(5000); // 5 seconds to establish TCP
        // server.setRequestWriter(new BinaryRequestWriter());
    
        SolrQuery query = new SolrQuery();
        query.setQuery("description:改革");
        query.setStart(0);
        query.setRows(2);
        query.setFacet(true);
        query.addFacetField("author_s");
    
        QueryResponse response = server.query(query);
        // 搜索得到的结果数
        System.out.println("Find:" + response.getResults().getNumFound());
        // 输出结果
        int iRow = 1;
        
        //response.getBeans存在BUG,将DocumentObjectBinder引用的Field应该为 org.apache.solr.client.solrj.beans.Field
        SolrDocumentList list = response.getResults();
        DocumentObjectBinderL binder = new DocumentObjectBinderL();
        List<NewsBean> beanList=binder.getBeans(NewsBean.class, list);
        for(NewsBean news:beanList){
          System.out.println(news.getId());
        }
    
        for (SolrDocument doc : response.getResults()) {
          System.out.println("----------" + iRow + "------------");
          System.out.println("id: " + doc.getFieldValue("id").toString());
          System.out.println("name: " + doc.getFieldValue("name").toString());
          iRow++;
        }
        for (FacetField ff : response.getFacetFields()) {
          System.out.println(ff.getName() + "," + ff.getValueCount() + ","
              + ff.getValues());
        }
      }
    }

Solr调研总结(很详细很全面)

Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;...
  • h348592532
  • h348592532
  • 2015年01月30日 12:15
  • 6882

solr的空间查询(查询地图周围坐标)

solr空间查询,可查询周围1000米以内的所有坐标~
  • alan_liuyue
  • alan_liuyue
  • 2017年09月02日 11:58
  • 531

solr空间搜索

空间搜索原理 空间搜索,又名Spatial Search,基于空间搜索技术,可以做到: 1)对Point(经纬度)和其他的几何图形建索引 2)根据距离排序 3)根据矩形,圆形或者其他的几何形状...
  • kevinxxw
  • kevinxxw
  • 2015年11月08日 11:21
  • 1538

solr示例程序

简介 SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底层是通过...
  • zhaoyue007101
  • zhaoyue007101
  • 2015年07月08日 15:05
  • 1020

solr 完成的开发示例项目

  • 2011年07月28日 10:24
  • 11.06MB
  • 下载

CMD文件理解(F2810,F2812)

2810和2812一样,CMD采用分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间;   在CMD文件里有两个基本的段:初始化段和非初始化段。初始化段包含代码和常数等必须在D...
  • li1004133206
  • li1004133206
  • 2016年12月20日 17:58
  • 301

运行Hadoop示例程序WordCount

WordCount程序的目标是统计几个文件中每个单词出现的次数,是官方提供的示例程序,这里使用的hadoop的版本为hadoop-1.2.1。 1)、首先编写代码,将WordCount.java文件放...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2015年04月08日 17:42
  • 1040

solr实际案例

重写公司的站内搜索。经过前期一段时间对lucene和solr的熟悉,最后决定使用Solr作为新系统的基础框架。现在已经是第一阶段开发的后期,核心代码行数有11000+(不包含admin及client等...
  • qing419925094
  • qing419925094
  • 2014年11月19日 16:59
  • 1255

solr基本操作代码示例

import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map...
  • youyou_yo
  • youyou_yo
  • 2016年06月15日 08:52
  • 379

VC获取天气

// weather.cpp : Defines the entry point for the console application. // #include "stdafx.h" ...
  • qq_30754685
  • qq_30754685
  • 2017年08月18日 17:42
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:solr示例程序
举报原因:
原因补充:

(最多只允许输入30个字)