Solr與Spring Boot整合 - Viithiisys

banq發表於2019-01-29

在本教程中,我將向您展示如何透過將Solr與Spring Boot整合來改進搜尋。Spring-data-solr是Spring Data的擴充套件,用於將Solr與Spring Boot starter整合。

什麼是Solr
Apache Solr既是搜尋引擎又是支援SQL的分散式文件資料庫。Solr核心是個搜尋引擎,但遠不止於此。它是一個具有事務支援的NoSQL資料庫。
步驟:

  • 配置Solr
  • 建立Solr文件
  • 建立Solr儲存庫

注意:github專案中提供了Solr REST API的完整示例。

配置Solr
你可以在這裡下載Solr 
基本Solr命令:

Directory solr/solr-5.3.1
Start Solr: ./bin/solr start
Stop Solr: ./bin/solr stop
Check Logs: tail -f server/logs/solr.log
Start Solr on a different port: ./bin/solr start -p 2000


執行Solr:

cd solr/solr-5.3.1
./bin/solr start


建立Core:

./bin/solr create -c user_core


與Spring Boot Project整合

新增依賴項Maven:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-solr</artifactId>
  </dependency>


Gradle:

implementation('org.springframework.boot:spring-boot-starter-data-solr')


建立Solr文件:
Solr文件是使用@SolrDocument註釋建立的,其核心是在其中定義的。
@Indexed註釋用於欄位以使其可搜尋。


import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.Indexed;
import org.springframework.data.solr.core.mapping.SolrDocument;

/**
 * @author anuragdhunna
 */

@SolrDocument(solrCoreName = "user_core")
public class UserDoc {

    @Id
    @Indexed
    private String id;

    @Indexed(name = "username", type = "string")
    private String username;

    @Indexed(name = "email", type = "string")
    private String email;

    @Indexed(name = "phone_number", type = "string")
    private String phoneNumber;

    // Getter Setters 
}

建立Solr倉儲:


import com.anuragdhunna.solrIntegration.documents.UserDoc;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.solr.repository.Query;
import org.springframework.data.solr.repository.SolrCrudRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author anuragdhunna
 */

@Repository
@Qualifier("userSolrRepo")
public interface UserSolrRepo extends SolrCrudRepository<UserDoc, String> {

    @Query(value = "*:*")
    List<UserDoc> getUsers();

}

注意:如果Solr在不同的埠上執行(8983),請在application.properties檔案中新增一個屬性:

spring.data.solr.host = http://127.0.0.1:3000/solr


對於完整的API參考,您可以在Github上檢查專案。

相關文章