1. 程式人生 > >Solr6.3 在Java中的簡單使用

Solr6.3 在Java中的簡單使用

import com.backzero.solr.service.SolrService;
import com.backzero.solr.util.SolrUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


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

/**
 * Created by BackZero on 2016/11/29 0029.
 */
@Service
@Transactional
public class SolerServiceImpl implements SolrService {

    /**
     * 簡單查詢
     * @param mQueryStr
     * @return query result
     */
    public SolrDocumentList query(String mQueryStr) {

        try {
            HttpSolrClient httpSolrClient = SolrUtils.connect();
            SolrQuery query = new SolrQuery();
            //設定查詢欄位
            query.setQuery(mQueryStr);
            //指定返回結果欄位
            query.set("fl","id,name");
            //覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般預設指定。必須大寫
            query.set("q.op","AND");
            //設定返回記錄數,預設為10條
            query.setRows(10);
            QueryResponse response = httpSolrClient.query(query);
            SolrDocumentList list = response.getResults();
            return  list;
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 分頁查詢
     * @param queryStr
     * @param start
     * @param rows
     * @return SolrDocumentList
     */
    public SolrDocumentList queryPage(String queryStr,Integer start,Integer rows ){
        try {
            HttpSolrClient httpSolrClient = SolrUtils.connect();
            SolrQuery query = new SolrQuery();
            //設定查詢欄位
            query.setQuery(queryStr);
            //指定返回結果欄位
            query.setIncludeScore(true);
            // query.set("fl","id,name");
            //覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般預設指定。必須大寫
            query.set("q.op","AND");
            //分頁開始頁數
            query.setStart(start);
            //設定返回記錄數,預設為10條
            query.setRows(rows);
            //設定對查詢結果是否高亮
            query.setHighlight(true);
            //設定高亮欄位前置標籤
            query.setHighlightSimplePre("<span style=\"color:red\">");
            //設定高亮欄位後置標籤
            query.setHighlightSimplePost("</span>");
            //設定高亮欄位
            query.addHighlightField("name");
            //設定拼寫檢查
            query.setRequestHandler("/spell");
            QueryResponse response = httpSolrClient.query(query);
           //獲取bean
           //  List<Object> bean = response.getBeans(Object.class);
            SolrDocumentList list = response.getResults();
            return  list;
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

    }

    /**
     * 新增一個實體
     *
     * @param object
     */
    public void addBean(Object object) {
        try {
            HttpSolrClient httpSolrClient = SolrUtils.connect();
            httpSolrClient.addBean(object);
            httpSolrClient.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SolrServerException e) {
            e.printStackTrace();
        }

    }

    /**
     * 新增簡單索引
     *
     * @param map
     */
    public void addDoc(Map<String, Object> map) {
        try {
            HttpSolrClient httpSolrClient = SolrUtils.connect();
            SolrInputDocument document = new SolrInputDocument();
            document = SolrUtils.addFileds(map,document);
            UpdateResponse response = httpSolrClient.add(document);
            httpSolrClient.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 刪除索引
     *
     * @param id
     */
    public void deleteById(String id) {
        try {
            HttpSolrClient httpSolrClient = SolrUtils.connect();
            httpSolrClient.deleteById(id);
            httpSolrClient.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}


import java.lang.reflect.Field;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.slf4j.LoggerFactory;
import org.apache.commons.beanutils.BeanUtils;


import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.Map;

/**
 * solr 工具類
 * Created by BackZero on 2016/11/29 0029.
 */
public class SolrUtils {

    /**
     * solr 伺服器訪問地址
     */
    private static String url = "http://localhost:9090/solr/new_core";

    private static Integer connectionTimeout = 100; // socket read timeout

    private static Integer defaltMaxConnectionsPerHost = 100 ;

    private static Integer maxTotalConnections = 100 ;

    private static Boolean  followRedirects = false ; // defaults to false
    private static Boolean allowCompression = true ;

   // private static  Integer maxRetries = 1 ; //defaults to 0.  > 1 not recommended.

    private static org.slf4j.Logger logger = LoggerFactory.getLogger(SolrUtils.class);

    /**
     * @param map key is filed name value,map value is filed value
     * @return SolrInputDocument
     */
    public static SolrInputDocument addFileds(Map<String,Object> map, SolrInputDocument document){

        if(document == null){
            document = new SolrInputDocument();
        }
        Iterator iterator = map.keySet().iterator();
        while (iterator.hasNext()){
            String key = iterator.next().toString();
            document.setField(key,map.get(key));
        }
        return document;
    }

    /**
     *建立solr連結,獲取 HttpSolrClient
     * @return HttpSolrClient
     */
    public static HttpSolrClient connect(){

        HttpSolrClient httpSolrClient = null;
        try{
            httpSolrClient = new HttpSolrClient.Builder(url).build();
            httpSolrClient.setParser(new XMLResponseParser());//設定xml文件解析器
            httpSolrClient.setConnectionTimeout(connectionTimeout);//socket read timeout
            httpSolrClient.setAllowCompression(allowCompression);
            httpSolrClient.setMaxTotalConnections(maxTotalConnections);
            httpSolrClient.setDefaultMaxConnectionsPerHost(defaltMaxConnectionsPerHost);
            httpSolrClient.setFollowRedirects(followRedirects);
        }catch (SolrException e){
            System.out.println("請檢查tomcat伺服器或埠是否開啟!");
            logger.error(e.getMessage());
            e.printStackTrace();
        }
        return  httpSolrClient;
    }

    /**
     * 將SolrDocument 轉換為Bean
     * @param record
     * @param clazz
     * @return bean
     */
    public static Object toBean(SolrDocument record, Class clazz){
        Object obj = null;
        try {
            obj = clazz.newInstance();
        } catch (InstantiationException e1) {
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            e1.printStackTrace();
        }
        Field[] fields = clazz.getDeclaredFields();
        for(Field field:fields){
            Object value = record.get(field.getName());
            try {
                BeanUtils.setProperty(obj, field.getName(), value);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
        return obj;
    }
}

}

相關推薦

JAVA簡單的MD5加密類(MD5Utils)

com rgs api body md5 mex 可能 title 思路 MD5加密分析: JDK API: 獲取對象的API: 加密的API: 1 package cn.utils; 2 3 import java.security.M

Java簡單的註冊、登陸例項

1、功能: 實現使用者的註冊,並能根據註冊的資訊正常登陸。 2、分析:  a) 具體類   i. 使用者類    1. 使用者基本類    2. 使用者操作類   ii. 測試類  b) 每個具體類的內容   i. 使用者基本類    1. 成員變數:使用者名稱、密碼    2. 構造方法:

JAVA簡單圖形介面的建立

在java中提供了兩套圖形介面類:AWT元件和SWING元件。 AWT元件jdk1.0的時候就推出的圖形介面類,它是位於java.awt包下的類。當時在開發AWT元件時,採用C和C++的語言,並且還呼叫了作業系統底層的函式來實現AWT元件,也是因為實現語言和作業

Java簡單使用RabbitMQ進行訊息收發

文章目錄 Windows中安裝RabbitMQ-Server 安裝Erlang 安裝RabbitMQ-Server 需要使用的依賴包 RabbitMQ服務提供類,含訊息接收與傳送 在

3.JAVA的多型

方法的重寫規則 引數列表必須完全與被重寫方法的相同; 返回型別必須完全與被重寫方法的返回型別相同; 訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如:如果父類的一個方法被宣告為public,那麼在子類中重寫該方法就不能宣告為protected。 父類的成員方法

Solr6.3Java簡單使用

import com.backzero.solr.service.SolrService; import com.backzero.solr.util.SolrUtils; import org.apache.solr.client.solrj.SolrQuery; imp

Java的網絡編程-3

exc main net ddr pri .get string rgs exception UDP:不可靠, 效率高, 數據報/非連接 Demo_1: Server 端: import java.io.IOException; import java.net.*; pu

201671010145 2016-2017-3Java程序設計》Java類與對象的區別

import -c indent cin ria wid let isp ans 1.什麽是類呢? 書面語句:類是一種事物,或者一類相同物體的抽象.類是對一個或者幾個相似對象的描述,它把不同對象具有的共性抽象出來.也可以說類是同一類對象的原型. 例如:人就是一個類,因為它是

javavolatile的簡單理解

mic 執行 行修改 java內存 long ack html spa 多少 原創作品,可以轉載,但是請標註出處地址:http://www.cnblogs.com/V1haoge/p/7833881.html   據說,volatile是java語言中最輕量級的並發控制方

java “文件” 和 “流” 的簡單分析

amp 簡單 orm cto abs perm ext rem png java 中 FIle 和 流的簡單分析 File類 簡單File 常用方法 創建一個File 對象,檢驗文件是否存在,若不存在就創建,然後對File的類的這部分操作進行演示,如文件的名稱、大小等 //

JavaJavadoc的{@link}與@see的簡單區別

java http 技術 pan lan 分享圖片 參考 article 圖片 {@link}與@see這兩個Javadoc註解都可以直接鏈接類和方法。用法基本一致。 但是@see必須頂頭寫,而{@link可以任意地方},如下所示: 參考: http:

Java使用UDP實現簡單的聊天功能

udp http @override 簡單的 ima string [] 發送消息 sock 通過DatagramSocket類來實現。此類表示用來發送和接收數據報包的套接字。 發送端代碼如下: 2 3 import java.io.IOException; 4

JAVAJDBC連接Mysql數據庫簡單測試

batch 數據庫 count() found rman too zone close static 一、引用庫   maven庫:mysql:mysql-connector-java:6.0.6 二、SDK環境   JAVA JDK10 三、測試代碼   

2018.3.31 java的遞歸

lin package str static n-1 pre 特點 等於 com java中的遞歸 1.概念 定義一個方法時,出現本方法調用本方法的過程,稱之為遞歸 2.特點 必然有一個邊界條件 使用遞歸代碼往往更簡潔,可讀性強 3.什麽時候使用遞歸

java對於redis的簡單操作

java info img png .com 圖片 jar包 9.png com 添加redis的jar包 java中對於redis的簡單操作

Java獲取類名的3種方法!

void new t .com 內部類名 clas 推薦 容易 pri new 獲取類名的方法 Java 中獲取類名的方式主要有以下三種。 getName() 返回的是虛擬機裏面的class的類名表現形式。 getCanonicalName() 返回的是更容易理解的

簡述JDBC原理 + 在JAVA異常是什麽 + throws 與 throw 區別 + 簡單解釋以下JAVA的多態

鏈接 con 原理 指向 引用 作用 ger 同名方法 nec JDBC原理:   加:加載驅動   鏈:創建連接   預:創建預編譯   執:執行SQL語句(查詢需要處理結果級)   釋:關閉鏈接;   DBC中定義了一些接口:   1、驅動管理:   DriverMan

javaString、StringBuffer和StringBuilder的區別(簡單介紹)

情況 string 建議 code serializa 就是 同步 安全性 之間 簡單介紹 java中用於處理字符串常用的有三個類: 1、java.lang.String 2、java.lang.StringBuffer 3、java.lang.StrungBuilder

Javastream的簡單使用

數量 arr 繼續 復數 () static class 簡單使用 簡單介紹 在Java8中,出現了stream流的概念。我個人認為,流的使用可以幫助我們更好的對數據集合進行叠代。 下面,先簡單看一下普通for循環和stream流的代碼。 public static vo

javaint->String 3種方式效率分析

nbsp ecif digits bsp num turn mode getchar obj 1.0 int轉String方式 java中,int轉String共有如下3種方式 (1) 字符串拼接(即num+"") (2) String.valueof(num) (3) I