一娄柳、Solr是什么?
- Solr是一個開源的艘绍、獨立的赤拒、快速的、高性能诱鞠、高可擴展的企業(yè)級搜索應用服務器挎挖,用于構建搜索應用程序。它是基于Lucene(全文搜索引擎)的Java搜索應用服務器(是一套war程序)般甲,是Lucene的更高一層的擴展封裝肋乍,底層使用易于擴展和修改的Java 來實現(xiàn)。服務器通信使用標準的HTTP 和XML敷存。同時也易于加入到Web應用程序中墓造。
- Solr提供了層面搜索(即統(tǒng)計)、命中醒目顯示并且支持多種輸出格式(包括XML/XSLT锚烦、JSON觅闽、.CSV等格式)。它易于安裝和配置涮俄,而且通過基于HTTP的webapp服務器實現(xiàn)可視化管理界面蛉拙,方便使用人員配置、訪問和調用彻亲。Solr已經(jīng)在眾多大型的網(wǎng)站中使用孕锄,較為成熟和穩(wěn)定吮廉。
- Solr 包裝并擴展了 Lucene的Java API(即內部集成了Lucene,apache提供的一些對搜索引擎做支持的jar包)畸肆,所以Solr的基本上沿用了Lucene的相關術語宦芦。更重要的是,Solr 創(chuàng)建的索引與 Lucene 搜索引擎庫完全兼容轴脐。
- 通過對Solr 進行適當?shù)呐渲玫鞅埃承┣闆r下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程序中的索引大咱。
- 此外恬涧,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 創(chuàng)建的索引碴巾∷堇Γ可以使用 Solr 的表現(xiàn)優(yōu)異的基本搜索功能,也可以對它進行擴展從而滿足企業(yè)的需要餐抢。
- 使用Solr構建的應用程序非常復雜现使,可提供高性能低匙。
總之旷痕,Solr是一個可擴展、可部署顽冶、搜索/存儲引擎欺抗,優(yōu)化搜索大量以文本為中心的數(shù)據(jù)。
二强重、Solr的特性
- 高級绞呈、強大的全文搜索功能;
- 專為高通量的網(wǎng)絡流量進行的優(yōu)化间景;
- 基于開放接口(XML和HTTP)的標準佃声;
- 綜合的HTML管理界面;
- 可伸縮性 -- 能夠有效地復制到另外一個Solr搜索服務器倘要;
- 使用XML配置達到靈活性和適配性圾亏;
- 高可擴展的插件體系;
- 高亮顯示檢索結果
- 動態(tài)集群封拧;
- 數(shù)據(jù)庫接口和電子文檔(Word 志鹃,PDF 等)的處理;
- 數(shù)據(jù)存儲和處理泽西;
三曹铃、Lucene是什么?
Lucene 是一個基于 Java 的全文信息檢索工具包捧杉,它不是一個完整的搜索應用程序陕见,而是為你的應用程序提供索引和搜索功能秘血。Lucene 目前是 Apache Jakarta(雅加達) 家族中的一個開源項目。也是目前最為流行的基于 Java 開源全文檢索工具包评甜。目前已經(jīng)有很多應用程序的搜索功能是基于 Lucene 直撤,比如 Eclipse 幫助系統(tǒng)的搜索功能。Lucene 能夠為文本類型的數(shù)據(jù)建立索引蜕着,所以你只要把你要索引的數(shù)據(jù)格式轉化的文本格式谋竖,Lucene 就能對你的文檔進行索引和搜索。
四承匣、Solr vs Lucene
Solr與Lucene 并不是競爭對立關系蓖乘,恰恰相反Solr 依存于Lucene,因為Solr底層的核心技術是使用 Apache Lucene 來實現(xiàn)的韧骗,簡單的說Solr是Lucene的服務器化嘉抒。
需要注意的是Solr 并不是簡單的對Lucene 進行封裝,它所提供的大部分功能都區(qū)別于Lucene 袍暴。
Solr和Lucene的本質區(qū)別有以下三點:搜索服務器些侍,企業(yè)級和管理。Lucene本質上是搜索庫政模,不是獨立的應用程序岗宣,而Solr是。Lucene專注于搜索底層的建設淋样,而Solr專注于企業(yè)應用耗式。Lucene不負責支撐搜索服務所必須的管理,而Solr負責趁猴。所以說刊咳,一句話概括 Solr:
Solr是Lucene面向企業(yè)搜索應用的擴展。
Solr 和 Lucene的架構圖:(此圖是借用的別的博客上的儡司,后面會寫上鏈接)
這個圖很繁瑣娱挨,看不懂,大家不要灰心捕犬,在后面的代碼里你就能夠了解了這個圖所講的跷坝。
不難看出,綠色的就是lucene的模塊或听,而藍色的就是solr擴展了lucene探孝。從圖上可以看出以下幾點:
- 一個真正的擁有動態(tài)字段(Dynamic Field)和唯一鍵(Unique Key)的數(shù)據(jù)模式(Data Schema)
- 對Lucene查詢語言的強大擴展!
- 支持對結果進行動態(tài)的分組和過濾
- 高級的誉裆,可配置的文本分析
- 高度可配置和可擴展的緩存機制
- 性能優(yōu)化
- 支持通過XML進行外部配置
- 擁有一個管理界面
- 可監(jiān)控的日志
- 支持高速增量式更新(Fast incremental Updates)和快照發(fā)布(Snapshot Distribution)
五顿颅、solr兩種部署模式介紹
- Standalone Server 獨立服務器模式(單機啟動模式):適用于數(shù)據(jù)規(guī)模不大的場景;
- SolrCloud 分布式集群模式(集群啟動模式):適用于數(shù)據(jù)規(guī)模大足丢,高可靠粱腻、高可用庇配、高并發(fā)的場景;
solr的簡介就到此結束了绍些,相信大家也對solr有了初步的了解捞慌,下面讓我們開始安裝、使用Solr吧柬批,在使用過程中也順便介紹一下solr的常用屬性啸澡。
Solr軟件的安裝與使用
一、環(huán)境介紹
- 系統(tǒng):Linux氮帐、Windows嗅虏、MacOS;
- JDK需在JDK1.7+ 版本(運行標準Solr 服務只需要安裝JRE 即可上沐,但如果需要擴展功能或編譯源碼則需要下載JDK 來完成皮服。從solr6開始只能使用jdk1.8+。)参咙;
- maven需在Maven3+ 版本龄广;
- tomcat服務器建議在tomcat7+ 版本;
- mysql數(shù)據(jù)庫需在mysql5+ 版本蕴侧;
- solr需在solr4+ 版本(solr5.0以上建議tomcat服務器在tomcat8以上)择同;
注意:
solr4.x版本的核心類及常用的屬性,和solr5.0以上的差不多戈盈,但是還有細微的區(qū)別奠衔,請注意!
我這里使用的是MacOS10.14.5塘娶、JDK1.8.0_212、Maven3痊夭、tomcat9.0.20刁岸、mysql5.7、solr8.1.1她我。
二虹曙、安裝Solr
- 通過brew安裝
- 通過brew安裝的,命令如下:
$ brew search solr # 搜索一下是否有可用的solr軟件
$ brew install solr # 安裝solr
- 運行以下命令番舆,啟動Solr服務器酝碳。命令如下:
$ solr start # 開始運行Solr服務器,默認是8983端口
$ solr stop # 停止運行Solr服務器
啟動成功恨狈,說明Solr安裝成功疏哗。
- 在瀏覽器中,輸入“http://localhost:8983/solr/”訪問solr服務禾怠。出現(xiàn)如下圖頁面返奉,說明服務器已經(jīng)成功啟動了贝搁。
- Solr官網(wǎng)下載Solr壓縮包
- 在Solr官網(wǎng) 下載Solr 壓縮包。
- 解壓縮Solr壓縮包到目標目錄芽偏。
- 運行solr命令啟動Solr服務器(默認是
8983
端口)雷逆。 - 在瀏覽器中,輸入“http://localhost:8983/solr/”訪問solr服務污尉。
三膀哲、創(chuàng)建Core Admin/Collections
一個solr服務是可以有多個core的。
-
通過終端命令創(chuàng)建Core
通過終端命令的方式創(chuàng)建Core被碗,會自動幫你創(chuàng)建基本的conf等太、data文件夾及相關文件、core.properties文件蛮放。創(chuàng)建命令如下:
$ solr create -c testdemo
- 通過Solr可視化管理界面創(chuàng)建Core
- 我們先要在“server/solr”目錄下創(chuàng)建必要的配置信息缩抡,那么讓我們先進入到solr安裝的目錄下勤家,找到server目錄凡辱,然后進入到server下的solr 目錄(solr目錄是存放創(chuàng)建的Core的目錄)慷垮,在solr目錄下創(chuàng)建一個名為
testdemo2
的文件夾车吹,然后將server/solr/configsets/_default
目錄下的conf
文件夾及文件拷貝到testdemo2文件夾中(conf文件夾及文件可以手動創(chuàng)建拂铡,我這里就簡單粗暴一點了)殷绍,然后再在testdemo2下創(chuàng)建一個名為data的空文件夾萨螺,到這里準備工作就完成了决乎。文件結構如下:
- 在Solr可視化管理界面中岳悟,選擇
Core Admin
選項佃迄,然后點擊Add Core
按鈕,添加Core贵少,填寫要求的基本信息呵俏。如下圖:
在添加的彈窗下方有個提示信息:instanceDir and dataDir need to exist before you can create the core
,意思就是在創(chuàng)建Core之前要保證instanceDir和dataDir這兩個輸入框中填寫的文件夾一定是已經(jīng)存在的滔灶,否則就會報錯添加失敗普碎。
在實踐中,dataDir輸入框中填寫的data(可自定義)文件夾可以不存在录平,它會自動幫你創(chuàng)建名為data
的文件夾及其下的文件麻车,但是其他輸入框中的文件是必須要存在的。否則報類似如下錯誤:
- 點擊
?? Add Core
按鈕斗这,添加testdemo2核心动猬。至此就完成了界面添加Core的過程,如下圖:
四表箭、配置中文分詞器
solr雖然功能非常強大赁咙,但是solr還是存在一些不足的,下面我們就說說其中一個較大的問題那就是分詞問題,特別是中英文的混合分詞序目,處理起來非常棘手臂痕。在Solr中如果不配置中文分詞器,則默認是不支持中文分詞的猿涨。如圖搜索解析:
中文分詞的算法:基于字符串配置握童,基于統(tǒng)計以及機器學習的分詞方式。
這里我們使用兩種方式解決叛赚。
-
使用Solr自帶的Smartcn中文分詞器
Smartcn是Lucene自帶的一款基于統(tǒng)計規(guī)則來分詞的中文分詞器澡绩。
-
在
libexec?/contrib?/analysis-extras?/?lucene-libs?
目錄下找到Smartcn的jar包,如下圖:
-
將Smartcn的jar包拷貝到
?server?/solr-webapp?/webapp?/WEB-INF??/lib?
目錄下俺附,如下圖:
切換到創(chuàng)建的Core testdemo目錄下肥卡,配置conf目錄下的managed-schema文件(模式配置文件),在文件中添加如下信息事镣,并保存步鉴。
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory" />
</analyzer>
</fieldType>
- 添加完成,在終端運行
$ solr restart -force
命令重啟solr服務璃哟。 -
回到Solr管理界面氛琢,重新加載testdemo Core。然后再次進行搜索解析随闪,如下圖:
-
使用IK-Analyzer中文分詞器
雖然solr自帶了支持中文分詞的Smartcn阳似,但是其效果不是很好,擴展性比較差不能自定義擴展中文詞庫铐伴,所以推薦使用IK-Analyzer進行分詞撮奏,IK-Analyzer支持屏蔽關鍵詞、新詞匯的配置当宴。
- 下載IK-Analyzer分詞器的jar包畜吊。然后將jar包拷貝到
server/solr-webapp/webapp/WEB-INF/lib
目錄下(如果使用了tomcat,那么該jar包應該拷貝到apache-tomcat-9.0.20/webapps/solr/WEB-INF/lib/
目錄下)即供。 - 配置
server/solr/testdemo/conf
目錄下的managed-schema
文件定拟,在文件中添加如下內容:
<fieldType name="text_ik" class="solr.TextField">
<!-- 生成索引時使用的分詞器 -->
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<!-- 查詢時使用的分詞器 -->
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
- 添加完成,在終端運行
$ solr restart -force
命令重啟solr服務逗嫡。 -
回到Solr管理界面,重新加載testdemo Core株依。然后再次進行搜索解析
五驱证、DIH導入索引數(shù)據(jù)并創(chuàng)建索引文件
DIH簡介:
DIH全稱是Data Import Handler 數(shù)據(jù)導入處理器,顧名思義這是向solr中導入數(shù)據(jù)的恋腕,我們的solr目的就是為了能讓我們的應用程序更快的查詢出用戶想要的數(shù)據(jù)抹锄,而數(shù)據(jù)存儲在應用中的各種地方入xml、pdf、關系數(shù)據(jù)庫中伙单,那么solr首先就要能夠獲取這些數(shù)據(jù)并在這些數(shù)據(jù)中建立索引來達成快速搜索的目的获高,這里就列舉我們最常用的從關系型數(shù)據(jù)庫中向solr導入索引數(shù)據(jù)。
- 使用Solr可視化管理界面到如數(shù)據(jù)
將
libexec/dist
目錄下的solr-dataimporthandler-8.1.1.jar
和solr-dataimporthandler-extras-8.1.1.jar
兩個jar包拷貝到server/solr-webapp/webapp/WEB-INF/lib
目錄下吻育。進入testdemo Core目錄下的conf目錄念秧,然后在
solrconfig.xml
文件中配置DIH,配置信息如下:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-dataconfig.xml</str> <!-- 數(shù)據(jù)庫配置文件的路徑布疼,根據(jù)你的配置文件的位置填寫路徑摊趾,可是寫相對路徑,也可以寫絕對路徑 -->
</lst>
</requestHandler>
- 創(chuàng)建
db-dataconfig.xml
數(shù)據(jù)庫配置文件游两,然后配置數(shù)據(jù)庫信息砾层,
<dataConfig>
<!-- 配置數(shù)據(jù)庫,參數(shù)之間需要用 & 連接 -->
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/artbase_30?useUnicode=true&characterEncoding=utf8&useSSL=false" user="xxx" password="xxx" />
<document>
<!-- 配置entity( entity的name可以隨便起)贱案,可以把它當作與數(shù)據(jù)庫中一個表對應肛炮,在query中書寫查詢sql -->
<entity name="art_course_info" query="select Member_ID,Course_Name,Add_Time from art_course_info where Member_ID=0099">
<field column="Course_ID" name="id"/>
<field column="Member_ID" name="memberID"/>
<field column="Course_Name" name="courseName"/>
<field column="Synopsis" name="synopsis"/>
<field column="Course_Photo" name="coursePhoto"/>
</entity>
</document>
</dataConfig>
注意:
這里容易與schema中的配置混淆,我的理解是schema中配置的是創(chuàng)建索引的配置宝踪,而索引的創(chuàng)建需要有數(shù)據(jù)基礎侨糟,而現(xiàn)在講的數(shù)據(jù)導入文件就是建立索引的數(shù)據(jù)基礎,他是創(chuàng)建索引的元數(shù)據(jù)‰饶現(xiàn)在配置文件完成后可以用DIH命令執(zhí)行了粟害。
- 配置
managed-schema
文件,此文件中需要配置我們的業(yè)務域(即需要存儲的數(shù)據(jù)結構)颤芬,配置信息如下:
<!-- 配置字段域 -->
<field name="id" type="string" indexed="false" stored="true" required="true" multiValued="false" />
<field name="memberID" type="string" indexed="true" stored="true" />
<field name="courseName" type="string" indexed="true" stored="true" />
<field name="synopsis" type="string" indexed="true" stored="true" />
<field name="coursePhoto" type="string" indexed="true" stored="true" />
<!-- 關鍵詞 定義復制域字段悲幅,將課程名稱和課程描述都復制到 course_keywords這一個字段上 -->
<field name="course_keywords" type="text" indexed="false" stored="false" multiValued="true" />
<copyField source="courseName" dest="course_keywords" />
<copyField source="synopsis" dest="course_keywords" />
注意:
配置的name的值必須與db-dataconfig.xml文件中的name一致。
- 以上文件配置完成站蝠,
重啟solr服務
汰具。然后訪問Solr可視化管理后臺,在界面左側的下拉框中選擇testdemo
Core菱魔,然后選擇Dataimport
選項留荔,然后選擇你的 Entity(即在db-dataconfig.xml文件中定義的entity的name) ,點擊execute
按鈕澜倦,在右側查看信息聚蝶。具體如下圖:
如果導如失敗,會在Raw Status-Output
下的statusMessages
參數(shù)下提示"Full Import Failed": 2019-07-05 09:11:52
藻治。
執(zhí)行導入操作后碘勉,會自動生成索引文件、日志文件和dataimport屬性文件桩卵,如下圖:
- 選擇
Query
選項验靡,查詢導入的數(shù)據(jù)倍宾,操作如下圖:
六、solrJ的集成和使用
solrJ是一個用來訪問solr的java客戶端胜嗓,提供了索引和搜索的方法(將一些常用的命令封裝進去了)高职,通過solrJ提供的API 接口來操作solr服務。
在solr5系之后跟solr4最大的區(qū)別是被發(fā)布成了一個獨立的應用辞州。而不再需要tomcat等容器怔锌。在其內部集成了jetty服務器,他可以通過bin目錄的腳本直接運行啟動孙技。solr5有兩種運行模式产禾,獨立模式和云模式,獨立模式是以core來管理牵啦,云模式是以collection來管理亚情。
-
構建solrJ應用程序
我這里使用Maven集成的solrJ 8.1.1,具體代碼如下:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>8.1.1</version>
</dependency>
如果需要連接數(shù)據(jù)庫哈雏、注解等jar包楞件,請自行添加依賴,這里只對solrJ做簡單的使用裳瘪。
- solrJ的使用
- 創(chuàng)建一個名為
CourseInfo
的Entity土浸,CourseInfo
中聲明的變量是和managed-schema
中定義的field(字段域)的name是一致的。代碼如下:
public class CourseInfo {
// 課程id
@Field("id") // 如果field中的name和entity中的變量名不一致彭羹,則需要建立映射
private String courseID;
// 會員id
@Field
private String memberID;
// 課程名稱
@Field
private String courseName;
// 課程簡介
@Field
private String synopsis;
// 課程logo
@Field
private String coursePhoto;
/**
* set / get 方法
*/
public void setCourseID(String courseID) {
this.courseID = courseID;
}
public String getCourseID() {
return courseID;
}
public void setMemberID(String memberID) {
this.memberID = memberID;
}
public String getMemberID() {
return memberID;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getCourseName() {
return courseName;
}
public void setSynopsis(String synopsis) {
this.synopsis = synopsis;
}
public String getSynopsis() {
return synopsis;
}
public void setCoursePhoto(String coursePhoto) {
this.coursePhoto = coursePhoto;
}
public String getCoursePhoto() {
return coursePhoto;
}
/**
* 空構造函數(shù)
*/
public CourseInfo() {}
/**
* 有參構造函數(shù)
* @param courseID
* @param memberID
* @param courseName
* @param synopsis
* @param coursePhoto
*/
public CourseInfo(String courseID, String memberID, String courseName, String synopsis,
String coursePhoto) {
super();
this.courseID = courseID;
this.memberID = memberID;
this.courseName = courseName;
this.synopsis = synopsis;
this.coursePhoto = coursePhoto;
}
}
- 創(chuàng)建
CourseController
黄伊,并使用solrJ。
2.1 聲明需要的常量和變量
// Solr的基鏈接
private static final String SOLR_URL = "http://localhost:8983/solr";
private static final String SOLR_CORE = "testdemo";
// 聲明solrJ客戶端
private HttpSolrClient solrClient;
2.3 創(chuàng)建solr客戶端的方式
// 不同solr版本solrj 的創(chuàng)建方式有所不同
// solr4創(chuàng)建方式
SolrServer solrServer = new HttpSolrServer("http://127.0.0.1:8080/solr");
// solr5創(chuàng)建方式,在url中指定core名稱:core1
HttpSolrClient solrServer=new HttpSolrClient("http://127.0.0.1:8080/solr/core1");
// solr7/8創(chuàng)建方式,在url中指定core名稱:core1
HttpSolrClient solrServer= new HttpSolrClient.Builder("http://127.0.0.1:8080/solr/core1").build();
2.2 添加/創(chuàng)建索引
/**
* 添加索引(創(chuàng)建索引)
* @param courseInfo
* @throws Exception
*/
public void addDocument(CourseInfo courseInfo) throws Exception {
// 創(chuàng)建solrJ客戶端實例派殷,并指定與solr通信的連接和讀取的超時時間还最,不指定走默認配置
solrClient = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
// 創(chuàng)建SolrInputDocument,并添加
SolrInputDocument solrInputDocument = new SolrInputDocument();
// 添加內容
solrInputDocument.addField("id", "2342131");
solrInputDocument.addField("Member_ID", "10");
solrInputDocument.addField("Course_Name", "dfadf");
solrInputDocument.addField("synopsis", "簡介的方框拉風的靜安寺附近為餓哦就我if抗菌素到哪里去卡");
solrInputDocument.addField("coursePhoto", "http://www.dsdf.com/1234.png");
// 添加到client
solrClient.add(SOLR_CORE, solrInputDocument);
// 索引文檔必須commit
solrClient.commit(SOLR_CORE);
// 關閉資源
solrClient.close();
}
2.4 查詢信息
/**
* solrJ之查詢
* @param condition
* @throws Exception
*/
public void query() throws Exception {
// 創(chuàng)建solrJ客戶端實例毡惜,并指定與solr通信的連接和讀取的超時時間拓轻,不指定走默認配置
solrClient = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
// 封裝查詢參數(shù)
SolrQuery solrQuery = new SolrQuery("*:*");
// 添加需要回顯得內容
solrQuery.addField("id");
solrQuery.addField("courseName");
solrQuery.addField("synopsis");
// 設置每頁顯示多少條
solrQuery.setStart(0);
solrQuery.setRows(20);
// 執(zhí)行查詢返回QueryResponse
QueryResponse queryResponse = solrClient.query(SOLR_CORE, solrQuery);
// 獲取doc文檔
SolrDocumentList documentList = queryResponse.getResults();
// 內容遍歷
for (SolrDocument document: documentList) {
System.out.println("courseID: " + document.get("id")
+ "\t memberID: " + document.get("memberID")
+ "\t courseName: " + document.get("courseName")
+ "\t synopsis: " + document.get("synopsis")
+ "\t coursePhoto: " + document.get("coursePhoto"));
}
// 關閉資源
solrClient.close();
}
2.5 刪除數(shù)據(jù)
/**
* solrJ之單個id 的刪除索引(一)
* @param id
* @throws Exception
*/
public void deleteById(String id) throws Exception {
// 創(chuàng)建solrJ客戶端實例,并指定與solr通信的連接和讀取的超時時間经伙,不指定走默認配置
solrClient = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
// 通過id刪除
solrClient.deleteById("1002");
// 提交
solrClient.commit(SOLR_CORE);
// 關閉資源
solrClient.close();
}
/**
* solrJ之多個id 的list集合 刪除索引(二)
* @param id
* @throws Exception
*/
public void deleteById2(String id) throws Exception {
// 創(chuàng)建solrJ客戶端實例扶叉,并指定與solr通信的連接和讀取的超時時間,不指定走默認配置
solrClient = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
// 通過多個id刪除
ArrayList<String> ids = new ArrayList<String>();
ids.add("1002");
ids.add("1003");
solrClient.deleteById(SOLR_CORE, ids);
// 提交
solrClient.commit(SOLR_CORE);
// 關閉資源
solrClient.close();
}
/**
* solrJ之通過deleteByQuery刪除索引(三)
* @param query
* @throws Exception
*/
public void deleteByQuery(String query) throws Exception {
// 創(chuàng)建solrJ客戶端實例帕膜,并指定與solr通信的連接和讀取的超時時間枣氧,不指定走默認配置
solrClient = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
// 執(zhí)行刪除
solrClient.deleteByQuery(SOLR_CORE, "id:1002");
// 提交操作
solrClient.commit(SOLR_CORE);
// 關閉資源
solrClient.close();
}
參考文章:
solr教程
Solr Apache Solr 初級教程(介紹、安裝部署垮刹、Java接口作瞄、中文分詞)
項目中如何使用solr
solr-部署詳解(solr兩種部署模式介紹、獨立服務器模式詳解危纫、SolrCloud分布式集群模式詳解)
Centos7安裝配置單機solr-8.1.1+ik-analyzer8.1.0+mysql中文分詞