정보가 폭발적으로 증가함에 따라 사용자가 필요한 정보를 빠르게 얻는 것이 점점 더 어려워지고 있습니다. 이 경우 전체 텍스트 검색 기능을 제공하는 것은 모든 웹사이트와 애플리케이션에 꼭 필요한 기능 중 하나가 되었습니다. 이 기사에서는 Spring Boot 프레임워크와 Elasticsearch 데이터베이스를 사용하여 애플리케이션에서 전체 텍스트 검색 기능을 구현하는 방법을 소개합니다.
Elasticsearch란 무엇인가요?
Elasticsearch는 간편한 데이터 분석과 실시간 검색이 가능한 오픈소스 분산 검색 엔진입니다. Apache Lucene 검색 엔진 라이브러리를 기반으로 하며 개발자가 해당 기능에 쉽게 액세스할 수 있는 RESTful API를 제공합니다. Elasticsearch를 사용하면 정형, 비정형 및 지리공간 데이터를 포함하여 거의 모든 유형의 데이터를 저장하고 검색할 수 있습니다.
Spring Boot와 Elasticsearch의 통합
Spring Boot는 독립 실행형 프로덕션 기반 Spring 애플리케이션을 구축하기 위한 프레임워크입니다. 이는 자동 구성 및 구성보다 규칙을 통한 접근 방식을 통해 Spring 애플리케이션 개발을 단순화합니다. Elasticsearch와의 통합을 위해 Spring Boot는 기본적으로 몇 가지 기본 구성 및 사용자 정의 옵션을 제공합니다.
먼저, Spring Boot 애플리케이션에 Elasticsearch의 종속성을 추가해야 합니다. build.gradle 파일에 다음 종속성을 추가합니다.
종속성 {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch', version: '2.5.0'
}
이 종속성을 추가한 후 Spring Data Elasticsearch 라이브러리의 리포지토리 패턴을 사용하여 모델과 인덱스를 쉽게 정의할 수 있습니다. Spring Data Elasticsearch는 애플리케이션에서 Elasticsearch를 작동하기 위한 다양한 클래스와 메소드를 제공합니다. 또한 Spring Boot 애플리케이션의 구성 파일에서 Elasticsearch 연결 구성을 설정해야 합니다. application.properties 파일에 다음 구성을 추가할 수 있습니다.
// elasticsearch의 주소 및 포트 설정
spring.data.elasticsearch.cluster-nodes=localhost:9200
// elasticsearch의 사용자 이름 및 비밀번호 설정( 필요한 경우 인증된 경우)
spring.data.elasticsearch.properties.username=elasticsearch
spring.data.elasticsearch.properties.password=password
인덱스 및 유형 정의
전체 텍스트 검색을 위해 Elasticsearch를 사용하기 전에 먼저 다음을 수행해야 합니다. 인덱스와 유형을 정의합니다. Elasticsearch에서 인덱스는 데이터베이스에 해당하고 유형은 데이터베이스의 테이블에 해당합니다. Spring Data Elasticsearch에서 제공되는 주석을 사용하여 엔터티와 인덱스를 정의할 수 있습니다. 다음은 간단한 예입니다.
// 엔터티 정의
@Document(indexName = "articles")
public class Article {
// 定义id @Id private String id; // 定义标题 @Field(type = FieldType.Text) private String title; // 定义内容 @Field(type = FieldType.Text) private String content; // 定义创建时间 @Field(type = FieldType.Date) private Date createTime; // 省略get和set方法
}
위 예에서는 @Document 주석을 사용하여 엔터티와 인덱스를 정의합니다. . indexName을 기사로 사용하여 인덱스를 생성하고 @Field 주석을 사용하여 Elasticsearch에 저장해야 하는 엔터티의 필드에 주석을 달았습니다. 다음으로 ElasticsearchRepository 클래스에서 상속되는 ArticleRepository 인터페이스를 생성할 수 있습니다. 이 인터페이스는 상속을 통해 Elasticsearch 기반의 다양한 데이터 쿼리 방법을 제공할 수 있습니다. 다음은 간단한 예입니다.
public 인터페이스 ArticleRepository는 ElasticsearchRepository
List<Article> findByTitle(String title);
}
위 예에 정의된 ArticleRepository 인터페이스의 경우 Spring Data Elasticsearch는 자동으로 다음을 구현하는 서비스 계층 인터페이스를 생성합니다. 애플리케이션이 시작될 때 구체적인 엔터티 클래스가 자동으로 Spring 컨테이너에 주입됩니다. 이 서비스 인터페이스에서는 제목을 기준으로 기사를 쿼리하는 데 사용되는 findByTitle 메소드를 정의했습니다. 실제 사용에서는 ArticleRepository를 통해 Elasticsearch의 추가, 삭제, 쿼리 등을 쉽게 운영할 수 있습니다.
전체 텍스트 검색 기능 구현
엔터티, 인덱스 및 유형을 정의한 후 해당 항목에 대한 전체 텍스트 검색 작업을 시작할 수 있습니다. Elasticsearch에서는 쿼리를 생성하여 전체 텍스트 검색 기능을 구현합니다. 쿼리는 지정된 인덱스, 유형 및 필드 내에서 검색을 수행하는 프로세스입니다. 다음은 간단한 예입니다.
공개 인터페이스 ArticleRepository는 ElasticsearchRepository
List<Article> searchArticle(String keyword);
}
이 예에서는 기사를 검색하기 위한 searchArticle 메서드를 정의합니다. 이 방법에서는 Elasticsearch의 QueryBuilder 빌더를 사용하여 다음과 같이 쿼리 조건을 작성할 수 있습니다.
public List
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder(); builder.withQuery(QueryBuilders.boolQuery() .should(QueryBuilders.matchQuery("title", keyword)) .should(QueryBuilders.matchQuery("content", keyword))); return elasticsearchTemplate.queryForList(builder.build(), Article.class);
}
여기서는 NativeSearchQueryBuilder를 사용하여 Inquire를 생성합니다. QueryBuilders를 사용하여 다양한 유형의 쿼리를 작성할 수 있습니다. 여기서는 부울 쿼리를 사용하여 제목과 내용에 키워드가 포함된 기사를 일치시킵니다. 쿼리가 작성된 후 elasticsearchTemplate.queryForList()를 사용하여 쿼리를 실행하고 결과를 얻을 수 있습니다. 물론 Spring Data Elasticsearch에서 제공하는 다양한 쿼리 방법을 사용하여 쿼리 작업을 수행할 수도 있습니다.
요약
이 글에서는 Spring Boot와 Elasticsearch를 사용하여 전체 텍스트 검색 기능을 구현하는 방법을 소개합니다. 먼저 Elasticsearch에 대한 기본 지식과 Spring Boot와 Elasticsearch의 통합 방법을 소개한 후, 인덱스와 타입을 정의하는 방법, 전체 텍스트 검색 기능을 구현하는 방법을 자세히 설명했습니다. 이 기사를 연구한 후에는 전체 텍스트 검색 기능을 Spring Boot 애플리케이션에 쉽게 통합하여 사용자가 필요한 정보를 더 빨리 찾을 수 있습니다.
위 내용은 Spring Boot 및 Elasticsearch를 사용하여 전체 텍스트 검색 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!