使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM