Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

1.部署Solr到Tomcat(Windows)

Solr自帶小型服務器jetty,但在我們開發環境中,習慣使用Tomcat,所以把Solr部署到Tomcat上(Tomcat 8.0以上,jdk 1.8以上)

其實步驟相同,但在windows配置要方便一些,所以第一次還是使用Windows來部署。

1.1 準備工作

下載Solr

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

下載 Tomcat

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

1.2 把 solr-7.5.0\server\solr-webapp下的webapp文件夾移到apache-tomcat-9.0.12\webapps下並改名solr(這個名字隨便起)

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

1.3 導入運行時候需要的依賴包,把solr-7.5.0\server\lib\ext下的包放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib下,

把solr-7.5.0\server\lib下m開頭的五個jar和gmetric4j-1.0.7.jar放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib下

1.4 在任意地方創建一個solrHome,裡面有一個solrCore,個人和我們的數據庫類似,一個用戶下可以創建很多個不同的數據庫

1.5 把solr-7.5.0\server下的solr文件夾下的內容複製到solrHome下

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

1.6 修改默認的solrHome,在apache-tomcat-9.0.12\webapps\solr\WEB-INF的web.xml修改 加上


solr/home
D:\Solr\solrHome
java.lang.String

env-entry-value寫自己的solrHome位置

並註釋以下這段話,不然會報403

 

1.7 把solr-7.5.0\server\resources的log4j2.xml放到apache-tomcat-9.0.12\webapps\solr\WEB-INF的classes文件夾下,classes文件剛開始沒有,自己創建一個。

1.8 啟動Tomcat

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

2.界面的簡單介紹

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

2.1.Dashboard

儀表盤,顯示了系統資源,jvm等信息

2.2.Logging

Solr運行的日誌

2.3 Core Admin

Solr Core的管理頁面

2.4 java properties

Solr在JVM 運行環境中的屬性信息,包括類路徑、文件編碼、jvm內存設置等信息

2.5 Thread Dump

顯示Solr Server中當前活躍線程信息,同時也可以跟蹤線程運行棧信息

3.創建一個solrCore

既然之前說類似於數據庫,使用數據庫之前肯定就要先創建數據庫,我們使用Solr就要先創建一個solrCore,直接使用可視化界面創建

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

報錯了,解決方法:solr-7.5.0\server\solr\configsets\_default下的config文件移到solrHome\new_core下

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

重啟Tomcat

在點擊下add core 就出現了

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

一個MySql實例可以創建多個數據庫,所以我們當然可以創建多個solrCore啦

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

修改core.properties

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

重啟Tomcat

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

4.Solr中的重要信息配置

在增刪查改前,我們要先了解一點Solr的信息配置

在Lucenc中有域和索引的概念,域是由域名和域的內容構成的,域名經過分詞,形成索引。

在Lucene中域是有類型的,比如StringField,LongField類型等,那麼在Solr中域的類型由寫在solrHome\new_core\conf\managed-schema中

4.1 fieldType 域類型

   













name:類型名字

class:指定該域類型對應的solr類型

analyzer:指定分詞器(中文使用ikanalyzer)屬性type index,query表示在創建索引和查詢索引時使用的分詞器

tokenizer:分詞器的類型

filter:過濾器的類型

4.2 fieldtype 域


name:域的名字

type:域的類型(自己定義的)

indexed:是否索引

stroed:是否存儲

required:是否必須

multiValued:是否多值

4.3 dynamicField 動態域


例子:為文檔增加域的時候,你可以用 “隨便起的_i”當做域名, 凡是以_i結尾的 type都是pint,需要indexed,需要stored

4.4 uniqueKey 唯一鍵

id

表示id唯一

5.配置中文分詞器 ikanalyzer

既然要添加索引,添加索引之前需要luncenc幫我們分詞,而官方的分詞器對中文的分詞基本是稀爛的,所以我們需要使用第三方的分詞器 ikanalyzer

5.1 下載ikanalyzer

下載地址:https://github.com/magese/ik-analyzer-solr7

5.2 配置ikanalyzer

首先把ik-analyzer-7.5.0.jar放到apache-tomcat-9.0.12\webapps\solr\WEB-INF\lib目錄下

然後:

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

5.3 使用ikanalyzer

在solrHome\new_core\conf\managed-schema中自定義fieldtype和field,使用中文分詞器來分詞

 






5.4 測試一下

重啟tomcat

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

問題來了,我的名字沒有加到詞庫,但是如果隨著新的詞語出現,我們就沒辦法分詞了,ik分詞器給我們提供了可以手動或自動加入詞彙的方法

apache-tomcat-9.0.12\webapps\solr\WEB-INF\classes下的ext.dic加入自己的詞彙,重啟Tomcat

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

6.使用可視化界面增刪查改文檔

增加文檔

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

更新文檔

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

刪除文檔

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

查詢文檔

首先查詢所有 *:*

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

加上過濾條件等一系列條件

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

q: 查詢關鍵字 查詢所有*:* 查詢固定的 就用 域名:域值

fq:過濾查詢

sort:排序 格式 : 先寫域名然後加升序或降序 ,不同域用逗號隔開 id desc,title_ik desc

start row : 用於分頁

fl:返回指定的域和域值,不同域用逗號隔開

df:指定一個搜索域,用處:比如有的時候查詢,title上要查,content也要查,如果分開查需要兩次請求,那麼我們就把title內容和content內容放在一起,在起個名字,

那麼我們就直接搜那個域和域的內容,只需要一次請求,我們可以在df中指定要搜索的域,然後直接在q中查

wt:指定輸出格式

hi:是否高亮,在指定的域中,比如我搜索中國,經過分詞,在title_ik域中找到了中國,那麼在中國這兩個字之前就加上pre前綴,在後面加上post後綴

7.使用SolrJ

Solr和SolrJ的關係類似於MySQL和JDBC,用java代碼來完成文檔的增加。

7.1壞境搭建


org.apache.solr
solr-solrj
7.5.0

7.2 代碼

package com.dingyu.sSolrJ;
import java.io.IOException;
import org.apache.commons.math3.geometry.partitioning.BSPTreeVisitor.Order;
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.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;
/**
* SolrJ的簡單使用
*
* @author 丁宇
*
*/
public class SolrJTest {
/**
* 獲得連接
*
* @return 連接對象
*/

private HttpSolrClient getClient() {
HttpSolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8080/solr/new_core").build();
return client;
}
/**
* 增加/修改文檔
*
* @throws SolrServerException
* @throws IOException
*/
@Test
public void addOrUpdateDoc() throws SolrServerException, IOException {
// 獲得連接對象
HttpSolrClient client = getClient();
// 創建一個文檔對象
SolrInputDocument document = new SolrInputDocument();
// 加域
document.addField("id", "521");
document.addField("title_ik", "張三說的在理");
// 提交
client.commit();
client.close();
}
/**
* 刪除文檔
*
* @throws SolrServerException
* @throws IOException
*/
@Test
public void deleteDoc() throws SolrServerException, IOException {
// 獲得連接對象
HttpSolrClient client = getClient();
// 根據id刪除
client.deleteById("521");
client.commit();
client.close();
}
/**
* 查詢文檔
* @throws SolrServerException
* @throws IOException
*/
@Test
public void selectDoc() throws SolrServerException, IOException {
// 獲得連接對象

HttpSolrClient client = getClient();
// 搜索條件
SolrQuery query = new SolrQuery("*:*");
//設置過濾條件
query.setFilterQueries("title_ik:[10 TO 20]");
//排序
query.setSort("title_ik",ORDER.asc);
//分頁
query.setStart(0);
query.setRows(10);
//要顯示的域
query.setFields("id","title_ik");
// 設置默認搜索域
query.set("df", "product_name");
// 設置高亮
query.setHighlight(true);
query.addHighlightField("title_ik");
query.setHighlightSimplePre("");
query.setHighlightSimplePost("
");

//執行查詢
QueryResponse response = client.query(query);
//查詢結果,一個文檔集合
SolrDocumentList results = response.getResults();
//遍歷
for (SolrDocument solrDocument : results) {
//根據key 獲得value
System.out.println(solrDocument.get("id"));
}
client.close();
}
}

7.3測試結果

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

Solr學習筆記——部署Solr到Tomcat上,可視化界面的介紹和使用

加Java架構師進階交流群獲取Java工程化、高性能及分佈式、高性能、深入淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走很多的彎路的 群號是:883922439 對了 小白勿進 最好是有開發經驗

注:加群要求

1、具有工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!


分享到:


相關文章: