首頁  >  文章  >  Java  >  Java API 開發中使用 Solr 進行全文搜索

Java API 開發中使用 Solr 進行全文搜索

WBOY
WBOY原創
2023-06-18 10:41:191366瀏覽

隨著互聯網的發展和資訊爆炸式增長,我們現在能夠訪問和獲取的信息量非常大,無論是從網頁、文獻還是日常生活中獲取的信息,都需要一種高效的方式來處理和管理。全文搜尋是一種非常有效率且常用的方式,它可以透過關鍵字或短語的方式定位和提取我們需要的信息,而 Solr 就是一種非常適合用於全文搜尋開發的工具。

本文將介紹 Solr 的基本概念以及如何在 Java API 開發中使用 Solr 進行全文搜尋。

一、Solr 簡介

Solr 本質上是一款開源的 enterprise search platform,它基於 Apache Lucene 的 Java 函式庫,並提供了一些方便的 REST APIs。根據Solr 官方的介紹,其主要包括以下特性:

  • 全文搜尋
  • 即時搜尋
  • 網站搜尋
  • 分散式搜尋
  • 資料庫整合
  • 多種文件格式的解析
  • 多種文件格式的匯出
  • #外部配置

作為一種企業級的搜尋平台,Solr 提供了非常完善的搜尋功能和靈活的配置方式,這使得我們在實際開發中可以很方便地進行搜尋模組的開發。以下我們將重點放在 Java API 開發中如何使用 Solr 進行全文搜尋。

二、使用 Solr 進行全文搜尋

2.1 安裝 Solr

首先,我們需要在本機環境或伺服器上安裝 Solr。 Solr 官方提供了非常方便的方式來安裝和運行 Solr:

  • 下載 Solr 位址:https://lucene.apache.org/solr/downloads.html。
  • 解壓縮檔:tar -zxvf solr-x.x.x.zip。
  • 進入解壓縮資料夾:cd solr-x.x.x。
  • 啟動 Solr:bin/solr start。

2.2 建立Solr Core 並定義Schema

Solr Core 是Solr 中一個非常核心的概念,它相當於一個獨立的搜尋環境,包含資料的索引和搜尋請求的處理。在 Solr 中,我們可以建立多個 Core,每個 Core 都可以有獨立的配置和資料集。

在 Solr 中,我們需要先建立一個 Core,然後再定義用於搜尋的 Schema。 Schema 定義了資料的欄位、類型、索引等屬性,這些屬性將影響搜尋的效率和準確度。

可以使用 Solr 自帶的 Schema or 使用者自訂 Schema 來定義搜尋所需的欄位屬性,這裡介紹使用 Solr 的預設 Schema。

使用Solr 自有預設Schema:

  1. 建立core:

    bin/solr create_core -c <core name>
  2. 清除所有已建立了的欄位:

    curl http://localhost:8983/solr/<core name>/schema -H 'Content-type:application/json' -d '{"delete-all-fields":{}}'
  3. 新增欄位:

    curl http://localhost:8983/solr/<core name>/schema -H 'Content-type:application/json' -d '
     {
       "add-field":{
          "name":"field_name",
          "type":"string",
          "stored":true
        }
     }'
  4. 重啟Solr服務

使用使用者自訂Schema:

使用者可以自訂Schema以滿足不同的應用需求,Solr提供了Schema API。為創作者提供了簡單的Schema添加。

  1. 建立core:

    bin/solr create_core -c <core name>
  2. 新增欄位:

    • 新增欄位類型:
      向Solr server發送POST 請求,content_type 設定為application/json
    {   
         "add-field-type": {   
           "name":"test_fieldType","class":"solr.TextField","indexAnalyzer":{   
              "tokenizer":{   
                 "class":"solr.StandardTokenizerFactory"   
              },"filters":[  
              {   
                  "class":"solr.StopFilterFactory",   
                  "ignoreCase":true,   
                  "words":"stopword.txt",   
                  "format":"snowball",   
                  "enablePositionIncrements":true   
              },{   
                  "class":"solr.SnowballPorterFilterFactory",   
                  "language":"English"   
              }   
             ],   
             "queryAnalyzer":{   
                 "tokenizer":{   
                    "class":"solr.StandardTokenizerFactory"   
                  },"filters":[  
                  {   
                     "class":"solr.StopFilterFactory",   
                     "ignoreCase":true,   
                     "words":"stopword.txt",   
                     "format":"snowball",   
                     "enablePositionIncrements":true   
                  },{   
                     "class":"solr.SnowballPorterFilterFactory",   
                     "language":"English"   
                   }   
                 ]   
              }   
           }   
    }
    • 新增欄位(title):
    {
         "add-field": {
             "name": "title",
             "type": "text_en",
             "stored": true
         }
    }

    欄位新增成功後會回傳回應。

  3. 在Solr config中指定這個Schema:

    進入${core}/conf目錄修改solrconfig.xml,加入以下程式碼:

    <schemaFactory class="ClassicIndexSchemaFactory"/>
    <schema name="schema_name" version="1.5">
        <field name="title" type="text_en" indexed="true" stored="true" />
    </schema>

二、在Java API 中使用Solr 進行全文搜尋

接下來,我們將介紹如何在Java Web 應用程式中使用Solr 的Java API 進行全文搜尋。

  1. 新增SolrJ 依賴

在Maven 專案中,我們需要加入SolrJ 依賴,Solr 官方提供了非常方便的依賴:

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>8.2.0</version>
</dependency>
  1. 在程式碼中使用SolrJ 進行搜尋

在Java 程式碼中,我們可以使用SolrJ 提供的QueryResponse 和SolrClient 來進行搜尋操作。查詢的資料都可以被視為鍵值對。

首先,我們需要建立 SolrClient 的實例。在 SolrJ 中,SolrClient 是 Solr 的客戶端,提供了直接呼叫 Solr REST API 的方法。

String solrUrl = "http://localhost:8983/solr/core_name";
SolrClient solr = new HttpSolrClient.Builder(solrUrl).build();

然後,我們需要建立一個 SolrQuery 對象,這個對像是用來設定搜尋參數的,其中包括搜尋關鍵字、排序規則、過濾條件等。

SolrQuery query = new SolrQuery();
query.setQuery("keyword");
query.setStart(0);
query.setRows(10);
query.setSort("sort_field", SolrQuery.ORDER.asc);
query.addFilterQuery("filter_field:filter_value");

最後,我們可以透過 solr.query(query) 方法來執行搜索,傳回的 QueryResponse 中包含了搜尋結果和相關的元資料資訊。我們需要透過 response.getResults() 方法來取得搜尋結果清單。

QueryResponse response = solr.query(query);
SolrDocumentList results = response.getResults();

在實際開發中,我們也可以根據需要對搜尋結果進行二次處理,例如將結果轉換為 JSON 格式或 Java 物件。

for (SolrDocument result : results) {
    String id = (String) result.getFieldValue("id");
    String title = (String) result.getFieldValue("title");
    String content = (String) result.getFieldValue("content");
    
    // 将搜索结果转换为 Java 实体类
    SearchResult item = new SearchResult(id, title, content);
    
    // 或将搜索结果转换为 JSON 字符串
    String json = new ObjectMapper().writeValueAsString(result);
}

以上就是在 Java API 開發中使用 Solr 進行全文搜尋的基本流程。 Solr 提供了非常完善的搜尋功能和 Java API 支持,使得我們可以輕鬆開發出高效、準確的搜尋模組,為用戶提供更好的搜尋體驗。

以上是Java API 開發中使用 Solr 進行全文搜索的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn