ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Solr Client 구현 (Solrj)
    IT/Spring 2023. 1. 3. 15:44
    반응형

    참고 문서:

    Spring Data Solr:  https://docs.spring.io/spring-data/solr/docs/4.3.x/reference/html/#reference
    Apache Solr: https://solr.apache.org/guide/8_0/client-apis.html

     


    1. gradle dependencies 추가

    [ spring-boot-starter-data-solr 2.4.13 버전 설치 시 사용되는 Dependencies ]

     - spring-data-solr: 4.3.15 (https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-solr/2.4.13)

     - solr-solrj: 8.5.2 (https://mvnrepository.com/artifact/org.springframework.data/spring-data-solr/4.3.15)

    implementation 'org.springframework.boot:spring-boot-starter:2.4.13'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    implementation 'org.springframework.boot:spring-boot-starter-data-solr:2.4.13'

    2. application-dev.yml 및 application.yml 수정

    # Solr Server URL 작성
    # URL에 Core 까지 입력할 경우 다른 Core에 접근이 불가하다.
    # 필자는 Solr 까지만 접근 후 호출 할 때마다 Core를 선택하여 호출했다.
    
    spring.data.solr:
      host: "my Solr URL"

    3. SolrConfig 구현

    @Configuration
    @ConfigurationProperties(prefix="spring.data.solr")
    @EnableSolrRepositories(basePackages = "my repository package")
    @Slf4j
    public class SolrConfig {
        @Value("${spring.data.solr.host}")
        private String solrHost;
    
        @Bean
        public SolrClient solrClient() {
            log.info("solrHostURL ={}", solrHost);
            return new HttpSolrClient.Builder(solrHost).build();
        }
    
        @Bean
        public SolrTemplate solrTemplate(SolrClient client) throws Exception {
            return new SolrTemplate(client);
        }
    
    }

     


    4. Doc (VO) 구현

    - Solr 공식에는 Document 라고 표시하지만, 필자는 VO와 동일한 역활을 한다고 생각하며 개발을 진행했다.

    - Collection 에서 Core를 정할 수 있다.

    - Solr Field와 동일하게 작성한다.

    @SolrDocument(collection  = "coreName")
    @Getter @Setter
    public class SolrVO {
    
        @Id
        @Indexed
        private String id;
    
        @Field("name")				private String name;
        @Field("Phone_Number")			private String phoneNumber;
        @Field("Adderss")				private String address;
        ....
        ...
    
    }

     


    5. Repository 구현

    - SolrCrudRepository를 상속받아 작성한다.

    - Query 예시들은 많으니 검색하거나 공식 문서를 확인하면 된다.

    - 현재 Query는 모든 데이터를 조회한다.

    public interface SolrRepo extends SolrCrudRepository<SolrVO, String> {
    
        @Query("*:*")
        List<SolrVO> getAllMembers();
    
    }

     


    6. Svc 구현

    @Service
    @Slf4j
    public class SolrSvc {
        @Resource
        private SolrRepo solrRepo;
    
        public List<SolrVO> getAllMembers() {
            return solrRepo.getAllMemebers();
        }
    }

     


    정리 

     

    생각보다 Document를 보면서 많이 해맸다.

    SolrClient와 SolrTemplate 역활은 무엇인지 어떻게 다른지 등 기본 적인 내용들은 찾는데 시간이 많이 소요됬다.

     

    또한 구현 하는 방법이 너무 다양하다.

    이 글에서는 가장 간단한 Repository를 구현하여 사용했지만,

    SolrQuery 객체를 이용하여 Repository 없이 직접 구현할 수 있다.

     

    조금 더 유연한 개발을 하기 위해서는 직접 구현을 하는 것이 더 적합하다.

    다음에는 직접 구현하는 내용을 정리해서 포스팅 해야겠다.

     

     

    반응형

    댓글

Designed by black7375.