Solr的使用-獨立服務器模式

一娄柳、Solr是什么?

  1. Solr是一個開源的艘绍、獨立的赤拒、快速的、高性能诱鞠、高可擴展的企業(yè)級搜索應用服務器挎挖,用于構建搜索應用程序。它是基于Lucene(全文搜索引擎)的Java搜索應用服務器(是一套war程序)般甲,是Lucene的更高一層的擴展封裝肋乍,底層使用易于擴展和修改的Java 來實現(xiàn)。服務器通信使用標準的HTTP 和XML敷存。同時也易于加入到Web應用程序中墓造。
  2. Solr提供了層面搜索(即統(tǒng)計)、命中醒目顯示并且支持多種輸出格式(包括XML/XSLT锚烦、JSON觅闽、.CSV等格式)。它易于安裝和配置涮俄,而且通過基于HTTP的webapp服務器實現(xiàn)可視化管理界面蛉拙,方便使用人員配置、訪問和調用彻亲。Solr已經(jīng)在眾多大型的網(wǎng)站中使用孕锄,較為成熟和穩(wěn)定吮廉。
  3. Solr 包裝并擴展了 Lucene的Java API(即內部集成了Lucene,apache提供的一些對搜索引擎做支持的jar包)畸肆,所以Solr的基本上沿用了Lucene的相關術語宦芦。更重要的是,Solr 創(chuàng)建的索引與 Lucene 搜索引擎庫完全兼容轴脐。
  4. 通過對Solr 進行適當?shù)呐渲玫鞅埃承┣闆r下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程序中的索引大咱。
  5. 此外恬涧,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 創(chuàng)建的索引碴巾∷堇Γ可以使用 Solr 的表現(xiàn)優(yōu)異的基本搜索功能,也可以對它進行擴展從而滿足企業(yè)的需要餐抢。
  6. 使用Solr構建的應用程序非常復雜现使,可提供高性能低匙。
    總之旷痕,Solr是一個可擴展、可部署顽冶、搜索/存儲引擎欺抗,優(yōu)化搜索大量以文本為中心的數(shù)據(jù)。

二强重、Solr的特性

  1. 高級绞呈、強大的全文搜索功能;
  2. 專為高通量的網(wǎng)絡流量進行的優(yōu)化间景;
  3. 基于開放接口(XML和HTTP)的標準佃声;
  4. 綜合的HTML管理界面;
  5. 可伸縮性 -- 能夠有效地復制到另外一個Solr搜索服務器倘要;
  6. 使用XML配置達到靈活性和適配性圾亏;
  7. 高可擴展的插件體系;
  8. 高亮顯示檢索結果
  9. 動態(tài)集群封拧;
  10. 數(shù)據(jù)庫接口和電子文檔(Word 志鹃,PDF 等)的處理;
  11. 數(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的架構圖:(此圖是借用的別的博客上的儡司,后面會寫上鏈接)


Solr與Lucene的架構圖.png

這個圖很繁瑣娱挨,看不懂,大家不要灰心捕犬,在后面的代碼里你就能夠了解了這個圖所講的跷坝。

不難看出,綠色的就是lucene的模塊或听,而藍色的就是solr擴展了lucene探孝。從圖上可以看出以下幾點:

  1. 一個真正的擁有動態(tài)字段(Dynamic Field)和唯一鍵(Unique Key)的數(shù)據(jù)模式(Data Schema)
  2. 對Lucene查詢語言的強大擴展!
  3. 支持對結果進行動態(tài)的分組和過濾
  4. 高級的誉裆,可配置的文本分析
  5. 高度可配置和可擴展的緩存機制
  6. 性能優(yōu)化
  7. 支持通過XML進行外部配置
  8. 擁有一個管理界面
  9. 可監(jiān)控的日志
  10. 支持高速增量式更新(Fast incremental Updates)和快照發(fā)布(Snapshot Distribution)

五顿颅、solr兩種部署模式介紹

  1. Standalone Server 獨立服務器模式(單機啟動模式):適用于數(shù)據(jù)規(guī)模不大的場景;
  2. SolrCloud 分布式集群模式(集群啟動模式):適用于數(shù)據(jù)規(guī)模大足丢,高可靠粱腻、高可用庇配、高并發(fā)的場景;

solr的簡介就到此結束了绍些,相信大家也對solr有了初步的了解捞慌,下面讓我們開始安裝、使用Solr吧柬批,在使用過程中也順便介紹一下solr的常用屬性啸澡。

Solr軟件的安裝與使用

一、環(huán)境介紹

  1. 系統(tǒng):Linux氮帐、Windows嗅虏、MacOS;
  2. JDK需在JDK1.7+ 版本(運行標準Solr 服務只需要安裝JRE 即可上沐,但如果需要擴展功能或編譯源碼則需要下載JDK 來完成皮服。從solr6開始只能使用jdk1.8+。)参咙;
  3. maven需在Maven3+ 版本龄广;
  4. tomcat服務器建議在tomcat7+ 版本;
  5. mysql數(shù)據(jù)庫需在mysql5+ 版本蕴侧;
  6. 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安裝
  1. 通過brew安裝的,命令如下:
$ brew search solr   # 搜索一下是否有可用的solr軟件
$ brew install solr  # 安裝solr
安裝solr.png
  1. 運行以下命令番舆,啟動Solr服務器酝碳。命令如下:
$ solr start  # 開始運行Solr服務器,默認是8983端口
$ solr stop   # 停止運行Solr服務器
啟動solr服務.png

啟動成功恨狈,說明Solr安裝成功疏哗。

  1. 在瀏覽器中,輸入“http://localhost:8983/solr/”訪問solr服務禾怠。出現(xiàn)如下圖頁面返奉,說明服務器已經(jīng)成功啟動了贝搁。
    Solr Admin.png
  • Solr官網(wǎng)下載Solr壓縮包
  1. 在Solr官網(wǎng) 下載Solr 壓縮包。
  2. 解壓縮Solr壓縮包到目標目錄芽偏。
  3. 運行solr命令啟動Solr服務器(默認是8983端口)雷逆。
  4. 在瀏覽器中,輸入“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
創(chuàng)建Core命令.png
界面查看創(chuàng)建的Core.png
  • 通過Solr可視化管理界面創(chuàng)建Core
  1. 我們先要在“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的空文件夾萨螺,到這里準備工作就完成了决乎。文件結構如下:
    從其他文件夾中拷貝conf文件夾及文件.png
創(chuàng)建testdemo2文件夾及相關信息.png
  1. 在Solr可視化管理界面中岳悟,選擇Core Admin選項佃迄,然后點擊Add Core按鈕,添加Core贵少,填寫要求的基本信息呵俏。如下圖:
    Add Core.png

在添加的彈窗下方有個提示信息:instanceDir and dataDir need to exist before you can create the core,意思就是在創(chuàng)建Core之前要保證instanceDir和dataDir這兩個輸入框中填寫的文件夾一定是已經(jīng)存在的滔灶,否則就會報錯添加失敗普碎。
在實踐中,dataDir輸入框中填寫的data(可自定義)文件夾可以不存在录平,它會自動幫你創(chuàng)建名為data的文件夾及其下的文件麻车,但是其他輸入框中的文件是必須要存在的。否則報類似如下錯誤:

錯誤1.png

錯誤2.png
  1. 點擊?? Add Core按鈕斗这,添加testdemo2核心动猬。至此就完成了界面添加Core的過程,如下圖:
    添加核心testdemo2成功.png
testdemo2目錄結構.png

四表箭、配置中文分詞器

solr雖然功能非常強大赁咙,但是solr還是存在一些不足的,下面我們就說說其中一個較大的問題那就是分詞問題,特別是中英文的混合分詞序目,處理起來非常棘手臂痕。在Solr中如果不配置中文分詞器,則默認是不支持中文分詞的猿涨。如圖搜索解析:


沒有添加中文分詞器時的搜索解析信息.png

中文分詞的算法:基于字符串配置握童,基于統(tǒng)計以及機器學習的分詞方式。

這里我們使用兩種方式解決叛赚。

  • 使用Solr自帶的Smartcn中文分詞器
    Smartcn是Lucene自帶的一款基于統(tǒng)計規(guī)則來分詞的中文分詞器澡绩。
  1. libexec?/contrib?/analysis-extras?/?lucene-libs?目錄下找到Smartcn的jar包,如下圖:

    smartcn的jar包.png

  2. 將Smartcn的jar包拷貝到?server?/solr-webapp?/webapp?/WEB-INF??/lib?目錄下俺附,如下圖:

    粘貼smartcn的jar到WEB-INF:lib目錄下.png

  3. 切換到創(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>
  1. 添加完成,在終端運行$ solr restart -force命令重啟solr服務璃哟。
  2. 回到Solr管理界面氛琢,重新加載testdemo Core。然后再次進行搜索解析随闪,如下圖:


    重新加載testdemo Core.png
添加中文分詞解析器后的搜索解析信息.png
添加中文分詞解析器后的搜索解析信息2.png
  • 使用IK-Analyzer中文分詞器
    雖然solr自帶了支持中文分詞的Smartcn阳似,但是其效果不是很好,擴展性比較差不能自定義擴展中文詞庫铐伴,所以推薦使用IK-Analyzer進行分詞撮奏,IK-Analyzer支持屏蔽關鍵詞、新詞匯的配置当宴。
  1. 下載IK-Analyzer分詞器的jar包畜吊。然后將jar包拷貝到server/solr-webapp/webapp/WEB-INF/lib目錄下(如果使用了tomcat,那么該jar包應該拷貝到apache-tomcat-9.0.20/webapps/solr/WEB-INF/lib/目錄下)即供。
  2. 配置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>
  1. 添加完成,在終端運行$ solr restart -force命令重啟solr服務逗嫡。
  2. 回到Solr管理界面,重新加載testdemo Core株依。然后再次進行搜索解析


    IKAnalyzer搜索解析結果.png

五驱证、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ù)
  1. libexec/dist目錄下的solr-dataimporthandler-8.1.1.jarsolr-dataimporthandler-extras-8.1.1.jar兩個jar包拷貝到server/solr-webapp/webapp/WEB-INF/lib目錄下吻育。

  2. 進入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>
  1. 創(chuàng)建db-dataconfig.xml數(shù)據(jù)庫配置文件游两,然后配置數(shù)據(jù)庫信息砾层,
<dataConfig>
    <!-- 配置數(shù)據(jù)庫,參數(shù)之間需要用 &amp; 連接 -->
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/artbase_30?useUnicode=true&amp;characterEncoding=utf8&amp;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í)行了粟害。

  1. 配置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一致。

  1. 以上文件配置完成站蝠,重啟solr服務汰具。然后訪問Solr可視化管理后臺,在界面左側的下拉框中選擇testdemo Core菱魔,然后選擇Dataimport選項留荔,然后選擇你的 Entity(即在db-dataconfig.xml文件中定義的entity的name) ,點擊execute按鈕澜倦,在右側查看信息聚蝶。具體如下圖:
    導入數(shù)據(jù).png

如果導如失敗,會在Raw Status-Output下的statusMessages參數(shù)下提示"Full Import Failed": 2019-07-05 09:11:52藻治。

執(zhí)行導入操作后碘勉,會自動生成索引文件、日志文件和dataimport屬性文件桩卵,如下圖:


dataimport屬性文件.png
生成的索引文件.png
日志文件.png
  1. 選擇Query選項验靡,查詢導入的數(shù)據(jù)倍宾,操作如下圖:
    查詢所有的數(shù)據(jù).png
查詢指定條件的數(shù)據(jù).png

六、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的使用
  1. 創(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;
    }
}
  1. 創(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中文分詞

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子种蝶,更是在濱河造成了極大的恐慌契耿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螃征,死亡現(xiàn)場離奇詭異搪桂,居然都是意外死亡,警方通過查閱死者的電腦和手機盯滚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門踢械,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人魄藕,你說我怎么就攤上這事内列。” “怎么了背率?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵话瞧,是天一觀的道長。 經(jīng)常有香客問我寝姿,道長交排,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任饵筑,我火速辦了婚禮埃篓,結果婚禮上,老公的妹妹穿的比我還像新娘根资。我一直安慰自己架专,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布嫂冻。 她就那樣靜靜地躺著胶征,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桨仿。 梳的紋絲不亂的頭發(fā)上睛低,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音服傍,去河邊找鬼钱雷。 笑死,一個胖子當著我的面吹牛吹零,可吹牛的內容都是我干的罩抗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼灿椅,長吁一口氣:“原來是場噩夢啊……” “哼套蒂!你這毒婦竟也來了钞支?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤操刀,失蹤者是張志新(化名)和其女友劉穎烁挟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骨坑,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡撼嗓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了欢唾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片且警。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖礁遣,靈堂內的尸體忽然破棺而出斑芜,到底是詐尸還是另有隱情,我是刑警寧澤亡脸,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布押搪,位于F島的核電站,受9級特大地震影響浅碾,放射性物質發(fā)生泄漏大州。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一垂谢、第九天 我趴在偏房一處隱蔽的房頂上張望厦画。 院中可真熱鬧,春花似錦滥朱、人聲如沸根暑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽排嫌。三九已至,卻和暖如春缰犁,著一層夾襖步出監(jiān)牢的瞬間淳地,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工帅容, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颇象,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓并徘,卻偏偏與公主長得像遣钳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子麦乞,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • 一.簡介 Solr是一個獨立的企業(yè)級搜索應用服務器蕴茴,它對外提供類似于Web-service的API接口劝评。用戶可以通...
    泰安青年閱讀 3,658評論 0 37
  • 1. 什么是solr ?? Solr 是Apache下的一個頂級開源項目,采用Java開發(fā)荐开,它是基于Lucene的...
    東方舵手閱讀 936評論 1 5
  • Solr&ElasticSearch原理及應用 一付翁、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,254評論 1 17
  • Solr的安裝與配置 多數(shù)搜索引擎應用都必須具有某種搜索功能,而搜索功能往往大量的消耗資源導致應用程序運行緩慢晃听。為...
    TyCoding閱讀 5,244評論 1 5
  • 1. Solr 官網(wǎng) 搜索引擎是指一個龐大的互聯(lián)網(wǎng)資源數(shù)據(jù)庫,如網(wǎng)頁砰识,新聞組能扒,程序,圖像等辫狼。它有助于在萬維網(wǎng)上定位...
    _凌浩雨閱讀 2,182評論 0 4