使用solrj api操作solr

1.创建maven项目。并添加相关的依赖。

  <dependencies>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>5.3.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>

2.新建log4j.properties。

log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

3.创建与schema.xml文件相对应的javabean,这里命名为Notice。并添加@Field注解,生成getter和setter方法。

public class Notice {
  @Field("id")
  private String id;
  @Field
  private String title;
  @Field
  private String subject;
  @Field
  private String description;
}

4.创建测试类SolrjTest,初始化HttpSolrClient。

public class SolrjTest {
  private HttpSolrClient httpSolrClient;
  @Before
  public void setUp() throws Exception {
    // 在url中指定core名称:notice
    String url = "http://localhost:777/solr/notice/";
    HttpSolrClient httpSolrClient = new HttpSolrClient(url);
    httpSolrClient.setParser(new XMLResponseParser()); // 设置响应解析器
    httpSolrClient.setConnectionTimeout(500); // 建立连接的最长时间
    this.httpSolrClient = httpSolrClient;
  }
}

5.测试添加。

@Test
  public void testAdd() throws IOException, SolrServerException {
    Notice notice = new Notice();
    String desc = "该应用场景为AdMaster DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称admckid)的mapping关系,还包括了admckid的人口标签、移动端id(主要是idfa和imei)的人口标签,以及一些黑名单id、ip等数据。";
    notice.setId(UUID.randomUUID().toString());
    notice.setTitle("Redis百亿级Key存储方案");
    notice.setSubject("该应用场景为AdMaster DMP缓存存储需求");
    notice.setDescription(desc);
    this.httpSolrClient.addBean(notice);
    this.httpSolrClient.commit();
  }

6.测试查询。

@Test
  public void testQuery() throws SolrServerException, IOException{
    String keywords = "应用";
    int page = 1;
    int rows = 10;

    SolrQuery solrQuery = new SolrQuery(); // 构造搜索条件
    solrQuery.setQuery("text:" + keywords); // 搜索关键词
    // 设置分页
    solrQuery.setStart((Math.max(page, 1) - 1) * rows);
    solrQuery.setRows(rows);

    QueryResponse queryResponse = this.httpSolrClient.query(solrQuery);
    List<Notice> notices = queryResponse.getBeans(Notice.class);
    for (Notice notice : notices) {
      System.out.println(notice.toString());
    }
  }

7.高亮。

@Test
  public void testHighlighting() throws SolrServerException, IOException{
    String keywords = "应用";
    int page = 1;
    int rows = 10;

    SolrQuery solrQuery = new SolrQuery(); // 构造搜索条件
    solrQuery.setQuery("text:" + keywords); // 搜索关键词
    // 设置分页
    solrQuery.setStart((Math.max(page, 1) - 1) * rows);
    solrQuery.setRows(rows);

    // 是否需要高亮
    boolean isHighlighting = !StringUtils.equals("*", keywords) && StringUtils.isNotEmpty(keywords);
    if (isHighlighting) {
      // 设置高亮
      solrQuery.setHighlight(true); // 开启高亮组件
      solrQuery.addHighlightField("title");// 高亮字段
      solrQuery.addHighlightField("subject");
      solrQuery.setHighlightSimplePre("<span style=‘color:red;‘>");// 标记,高亮关键字前缀
      solrQuery.setHighlightSimplePost("</span>");// 后缀
    }

    QueryResponse queryResponse = this.httpSolrClient.query(solrQuery);
    List<Notice> notices = queryResponse.getBeans(Notice.class);

    if (isHighlighting) {
      // 将高亮的标题数据写回到数据对象中
      Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();
      for (Map.Entry<String, Map<String, List<String>>> highlighting : map.entrySet()) {
        for (Notice notice : notices) {
          if (!highlighting.getKey().equals(notice.getId().toString())) {
            continue;
          }
          if(highlighting.getValue().get("title") != null){
            notice.setTitle(StringUtils.join(highlighting.getValue().get("title"), ""));
          }
          if(highlighting.getValue().get("subject") != null){
            notice.setSubject(StringUtils.join(highlighting.getValue().get("subject"),""));
          }
          break;
        }
      }
    }

    for (Notice notice : notices) {
      System.out.println(notice.toString());
    }
  }

8.删除。

@Test
  public void testDelete() throws SolrServerException, IOException{
    String id = "30a6d598-9762-455a-94f7-21fa011640d1";
    this.httpSolrClient.deleteById(id);
    this.httpSolrClient.commit();
  }

源码下载:http://pan.baidu.com/s/1bpBkHOF 密码:87ci

时间: 2024-08-02 04:46:07

使用solrj api操作solr的相关文章

使用solrj操作solr索引库

(solrj)初次使用solr的开发人员总是很郁闷,不知道如何去操作solr索引库,以为只能用<五分钟solr4.5教程(搭建.运行)>中讲到的用xml文件的形式提交数据到索引库,其实没有那么麻烦,solr配套有好多的客户端用于操作索引库,下面我们来讲如何用solrj去操作solr索引库. 一.认识solrj solrj是solr的java客户端,用于访问solr索引库.它提供了添加.删除.查询.优化等功能. 二.下载 百度.google以下solrj下载,你会发现根本就没有,那么我们该到哪儿

java操作solr实现索引,查询,删除,拼写检查等功能

使用java操作solr 前面讲了很多对solr的操作都是直接在页面上操作的,实际工作中肯定是要使用java进行操作的,在这我们就看一下如何使用java来操作solr Solr提供了solrj来使用java操作solr,SolrJ是封装了httpClient方法,来操作solr的API的.首先添加maven依赖 <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj<

Solrj API索引效率对比分析

测试软件环境: 1.16G windows7 x64  32core cpu . 2.jdk 1.7  tomcat 6.x  solr 4.8 数据库软件环境: 1.16G windows7 x64  32core cpu . 2.Oracle 11g 一.Solr默认索引工具DIH. 使用Solr DIH索引数据,一千九百万数据,耗时45分钟左右,每秒钟6500条/s,合计39w条没分钟. 相关jvm最大堆内存为4G,solr index config使用默认参数. Solr DIH 导入截

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

HBase API 操作范例

package com.test.hbase.api; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; import java.util.ArrayList; imp

HBase 6、用Phoenix Java api操作HBase

开发环境准备:eclipse3.5.jdk1.7.window8.hadoop2.2.0.hbase0.98.0.2.phoenix4.3.0 1.从集群拷贝以下文件:core-site.xml.hbase-site.xml.hdfs-site.xml文件放到工程src下 2.把phoenix的phoenix-4.3.0-client.jar和phoenix-core-4.3.0.jar添加到工程classpath 3.配置集群中各节点的hosts文件,把客户端的hostname:IP添加进去

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi

通过HTTP RESTful API 操作elasticsearch搜索数据

通过HTTP RESTful API 操作elasticsearch搜索数据