Lucene與Solr基礎

 
 
SolrSelectTest 查詢與刪除 

package
com.snow.solr; import com.snow.bean.Product; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Map; public class SolrSelectTest { public SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //1. solr的基本查詢 @Test public void baseQueryToSolr() throws SolrServerException { //1. 建立solrServer對象 // SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //2. 執行查詢: *:* 查詢所有 SolrQuery solrQuery = new SolrQuery("華爲"); QueryResponse response = solrServer.query(solrQuery); //3. 解析response SolrDocumentList documents = response.getResults(); for (SolrDocument document : documents) { Object id = document.get("id"); Object title = document.get("title"); Object content = document.get("content"); System.out.println(id+" "+title+" "+content+" "); } } //1.查詢後返回javaBean @Test public void javaBeanQueryToSolr() throws SolrServerException { //1. 建立solrServer對象 // SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1"); //2. 執行查詢: *:* 查詢所有 SolrQuery solrQuery = new SolrQuery("*:*"); QueryResponse response = solrServer.query(solrQuery); //3. 解析response List<Product> list = response.getBeans(Product.class); for (Product product : list) { System.out.println(product.toString()); } } // solr的複雜查詢: // 提取一個公共的查詢方法 public void baseQuery(SolrQuery solrQuery) throws SolrServerException { //1. 建立solrServer對象 // SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //2. 執行查詢: *:* 查詢所有 QueryResponse response = solrServer.query(solrQuery); //3. 解析response SolrDocumentList documents = response.getResults(); System.out.println(documents.size()); List<Product> list = response.getBeans(Product.class); for (Product product : list) { System.out.println(product); } } //1. 通配符查詢: ? * // ? 表示一個字符 // * 表示多個字符(0到多個) @Test public void wildCardQueryToSolr() throws SolrServerException { SolrQuery solrQuery = new SolrQuery("name:HUAWEI"); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //2. 布爾查詢 @Test public void booleanQueryToSolr() throws SolrServerException { //2. 執行查詢: /** * 1.布爾查詢: * AND OR NOT: * AND : MUST * OR: SHOULD * NOT : MUST_NOT */ SolrQuery solrQuery = new SolrQuery("content:lucene OR name:iPhone"); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //3. 子表達式查詢 @Test public void expressionQueryToSolr() throws SolrServerException { //表達式查詢: (條件1 [or and not] 條件2 ) [and or not] (條件1 [or and not] 條件2) SolrQuery solrQuery = new SolrQuery("(content:lucene NOT name:iPhone) or name:HUAWEI"); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //4. 相識度查詢 @Test public void fuzzQueryToSolr() throws SolrServerException { //相識度查詢: ~ // 格式: 字段名稱: 字段值~ 表示最大編輯2次 // 字段名稱: 字段值~1 表示最大編輯1次 SolrQuery solrQuery = new SolrQuery("name:HUAW~2"); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //5. 範圍查詢 @Test public void rangeQueryToSolr() throws SolrServerException { //範圍查詢: 支持數值 日期 文本 // 格式 [ 開始 TO 結束 ] 包含邊界值 SolrQuery solrQuery = new SolrQuery("id:[0 TO 1]"); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //6. solr的排序 @Test public void sortQueryToSolr() throws SolrServerException { SolrQuery solrQuery = new SolrQuery("*:*"); //設置排序: // 參數1 指定排序的字段 參數2: 排序方式 asc 和 desc SolrQuery.SortClause sortClause = new SolrQuery.SortClause("price", "desc"); SolrQuery.SortClause sortClause2 = new SolrQuery.SortClause("id", "desc"); List<SolrQuery.SortClause> list = new ArrayList<SolrQuery.SortClause>(); list.add(sortClause); list.add(sortClause2); /** * 多個排序 */ solrQuery.setSorts(list); /** * 單個排序 */ //solrQuery.setSort("id", SolrQuery.ORDER.desc); solrQuery.setRows(20);//顯示多少條數據 baseQuery(solrQuery); } //7. solr的分頁 @Test public void limitQueryToSolr() throws SolrServerException { //定義兩個參數 int page = 1;//當前頁 int pageSize = 1; //每頁的條數 SolrQuery solrQuery = new SolrQuery("*:*"); solrQuery.setStart((page-1)*pageSize); solrQuery.setRows(pageSize);//顯示多少條數據 baseQuery(solrQuery); } //8. solr的高亮 @Test public void highlighterQueryToSolr() throws SolrServerException { //1. 建立solrServer對象 // SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); //定義兩個參數 int page = 1;//當前頁 int pageSize = 3; //每頁的條數 SolrQuery solrQuery = new SolrQuery("title:貴 OR name:HUAW~2"); //設置高亮------開始 solrQuery.setHighlight(true); solrQuery.addHighlightField("title"); solrQuery.addHighlightField("name"); solrQuery.setHighlightSimplePre("<font color='red'>"); solrQuery.setHighlightSimplePost("</font>"); solrQuery.setHighlightSnippets(10); //設置最大的分片數,默認爲1, 主要針對若是是多字段的狀況 //設置高亮------結束 solrQuery.setStart((page-1)*pageSize); solrQuery.setRows(pageSize);//顯示多少條數據 QueryResponse response = solrServer.query(solrQuery); //獲取高亮的集合 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); for (String docID : highlighting.keySet()) { //獲取對應文檔的高亮集合 Map<String, List<String>> map = highlighting.get(docID); List<String> list = map.get("name"); if (list != null) { System.out.println("list的長度"+list.size()); System.out.println("高亮內容"+list.get(0)); } list = map.get("title"); if (list != null) { System.out.println("list的長度"+list.size()); System.out.println("高亮內容"+list.get(0)); } } } }

 

  

SolrSaveDelete 保存於刪除
package com.snow.solr;

import com.snow.bean.Product;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SolrSaveDelete {

    public SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");

    //1. solr的基礎入門案例
    @Test
    public void createIndexToSolr() throws IOException, SolrServerException {

        //1. 建立solrj對象
//        SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");

        //2.1 添加document對象(此處爲solr的document)
        SolrInputDocument doc = new SolrInputDocument();

        doc.addField("id","1");
        doc.addField("content","我是一箇中國人, 我喜歡咱們的國家");
        doc.addField("title","簡介");

        //2. 進行索引的添加
        solrServer.add(doc);
        //3. 提交索引
        solrServer.commit();
    }

    //2. 寫入多條索引
    @Test
    public void createManyIndexToSolr() throws IOException, SolrServerException {
        //1. 建立solrServer對象
//        SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
        //2.1 設置多條數據
        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        for(int i=0 ; i<10 ; i++){
            //2.1.1 建立一個document
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id",i);
            document.addField("content","solr是一個獨立的企業級搜索應用服務器, 能夠經過http請求訪問這個服務器, 獲取或者寫入對應的內容, 其底層是Lucene "+i);
            document.addField("title","solr的簡介");

            //2.1.2 將document添加到集合中
            docs.add(document);
        }

        //2. 寫入索引
        solrServer.add(docs);

        //3. 提交索引
        solrServer.commit();
    }

    //3. 經過javaBean向solr寫入索引
    @Test
    public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
        //1. 建立solrServer對象
        SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
        //2.1 建立product對象, 寫入索引
        Product product = new Product();
        product.setId("11");
        product.setName("HUAWEI Mate 20");
        product.setBrand("華爲");
        product.setPrice(4999.0F);
        product.setTitle("亮瞎你的雙眼,沒辦法就是好用");
        //2. 寫入索引
        solrServer.addBean(product);
        //3. 提交索引
        solrServer.commit();

    }

    //4. 刪除索引的操做
    //修改的操做這裏不演示, 當id相同就是修改, id不一樣就是添加
    @Test
    public void deleteIndexToSolr() throws IOException, SolrServerException {
        //1. 建立solrServer對象
//        SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/collection1");
        //2. 執行刪除
        //solrServer.deleteById("10"); //經過id刪除, 能夠傳遞一 個id , 也能夠傳遞一個ids數組進行刪除
        // 條件的基本格式:  字段名稱:字段值
        solrServer.deleteByQuery("*:*"); //根據條件刪除   *:* 刪除所有
        //3.執行提交
        solrServer.commit();
    }

}

 

 

 

        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>4.10.2</version>
        </dependency>
        <!--日誌的包, solrj執行須要一個日誌包-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>1.1</version>
        </dependency>
    </dependencies>
相關文章
相關標籤/搜索