Elasticsearch 안정형 플러그인 개발
원본 보기Elasticsearch 안정형 플러그인 개발
텍스트 분석 플러그인은 Elasticsearch에 사용자 정의 Lucene 분석기, 토큰 필터, 문자 필터 및 토크나이저를 제공합니다.
텍스트 분석 플러그인은 안정형 플러그인 API를 기반으로 개발할 수 있습니다. 이 API는 다음 종속성으로 구성됩니다.
plugin-api- 플러그인 개발자가 사용자 정의 Elasticsearch 플러그인을 구현하는 데 사용하는 API입니다.plugin-analysis-api- 플러그인 개발자가 분석 플러그인을 구현하고 Elasticsearch에 통합하는 데 사용하는 API입니다.lucene-analysis-common-Tokenizer,Analyzer,TokenStream과 같은 핵심 Lucene 분석 인터페이스를 포함하는plugin-analysis-api의 종속성입니다.
동일한 메이저 버전 내의 새 Elasticsearch 버전에서는 이 API를 기반으로 빌드한 플러그인을 다시 컴파일할 필요가 없습니다. 향후 API 버전은 이전 버전과 호환되며, 플러그인은 이후 Elasticsearch 버전과 바이너리 호환성을 유지합니다. 즉, 정상적으로 작동하는 아티팩트를 한 번 만들면 Elasticsearch를 새 버그 수정 또는 마이너 버전으로 업그레이드할 때 재사용할 수 있습니다.
텍스트 분석 플러그인은 분석 플러그인 API에서 제공하는 네 가지 팩토리 클래스를 구현할 수 있습니다.
- Lucene 분석기를 생성하는
AnalyzerFactory - 문자 필터를 생성하는
CharFilterFactory - Lucene 토큰 필터를 생성하는
TokenFilterFactory - Lucene 토크나이저를 생성하는
TokenizerFactory
안정형 플러그인 구현의 핵심은 @NamedComponent 어노테이션입니다. Elasticsearch의 많은 구성 요소에는 설정에서 사용되는 이름이 있습니다. 예를 들어 키워드 분석기는 설정에서 "keyword"라는 이름으로 참조됩니다. 사용자 정의 플러그인을 클러스터에 설치하면 이름이 지정된 구성 요소도 이러한 설정에서 이름으로 참조할 수 있습니다.
텍스트 분석 플러그인을 클래식 플러그인으로 만들 수도 있습니다. 그러나 클래식 플러그인은 특정 Elasticsearch 버전에 종속됩니다. Elasticsearch를 업그레이드할 때 다시 컴파일해야 합니다. 클래식 플러그인은 변경될 수 있는 내부 API를 기반으로 빌드되므로 새 버전으로 업그레이드할 때 코드를 변경해야 할 수 있습니다.
안정형 플러그인은 JAR 파일과 두 개의 메타데이터 파일로 구성된 ZIP 파일입니다.
stable-plugin-descriptor.properties- 플러그인을 설명하는 Java 속성 파일입니다. 안정형 플러그인의 플러그인 설명자 파일을 참조하세요.named_components.json- 인터페이스를 구성 요소 이름과 구현 클래스의 키-값 쌍에 매핑하는 JSON 파일입니다.
플러그인 루트에 있는 JAR 파일만 플러그인의 클래스 경로에 추가됩니다. 다른 리소스가 필요하면 리소스 JAR에 패키징하세요.
Elastic은 안정형 플러그인을 더 쉽게 개발하고 패키징할 수 있도록 Gradle 플러그인 elasticsearch.stable-esplugin을 제공합니다. 이 섹션의 단계에서는 이 플러그인을 사용한다고 가정합니다. 그러나 플러그인을 만드는 데 Gradle이 반드시 필요한 것은 아닙니다.
Elasticsearch Github 저장소에는 분석 플러그인 예제가 있습니다. 예제 build.gradle 빌드 스크립트는 자체 플러그인 개발을 시작하기에 좋은 출발점입니다.
플러그인은 Java로 작성되므로 Java Development Kit (JDK)를 설치해야 합니다. Gradle을 사용하려면 Gradle도 설치하세요.
프로젝트용 디렉터리를 만듭니다.
예제
build.gradle빌드 스크립트를 프로젝트 디렉터리에 복사합니다. 이 빌드 스크립트는elasticsearch.stable-espluginGradle 플러그인을 사용하여 플러그인을 빌드합니다.build.gradle빌드 스크립트를 편집합니다.파일 상단에
pluginApiVersion및 이에 맞는luceneVersion변수 정의를 추가합니다. 이러한 버전은build-tools-internal/version.properties파일이 있는 Elasticsearch Github 저장소에서 확인할 수 있습니다.빌드 스크립트의
esplugin섹션에서name과description을 편집합니다. 그러면 플러그인 설명자 파일이 생성됩니다.elasticsearch.stable-espluginGradle 플러그인을 사용하지 않는 경우 안정형 플러그인의 플러그인 설명자 파일을 참조하여 파일을 수동으로 만드세요.모듈 정보를 추가합니다.
다음 컴파일 시간 종속성을 선언했는지 확인합니다. Elasticsearch가 런타임에 이러한 라이브러리를 제공하므로 이 종속성들은 컴파일 시간에만 필요합니다.
org.elasticsearch.plugin:elasticsearch-plugin-apiorg.elasticsearch.plugin:elasticsearch-plugin-analysis-apiorg.apache.lucene:lucene-analysis-common
단위 테스트를 위해 이러한 종속성도
testImplementation종속성으로build.gradle스크립트에 추가했는지 확인합니다.
분석 플러그인 API의 인터페이스를 구현하고
NamedComponent어노테이션을 추가합니다. 예시는 텍스트 분석 플러그인 예제를 참조하세요.이제 다음 명령을 실행하여 플러그인 ZIP 파일을 어셈블할 수 있습니다.
gradle bundlePlugin생성된 플러그인 ZIP 파일은
build/distributions디렉터리에 기록됩니다.
Gradle elasticsearch.yaml-rest-test 플러그인을 사용하면 Elasticsearch yamlRestTest 프레임워크를 사용하여 플러그인을 테스트할 수 있습니다. 이 테스트는 YAML 형식의 도메인 언어를 사용하여 플러그인이 설치된 내부 Elasticsearch 클러스터에 REST 요청을 보내고 그 요청의 결과를 확인합니다. YAML REST 테스트 디렉터리의 구조는 다음과 같습니다.
src/yamlRestTest/java아래에 정의된 테스트 스위트 클래스입니다. 이 클래스는ESClientYamlSuiteTestCase를 확장해야 합니다.- YAML 테스트 자체는
src/yamlRestTest/resources/test/아래에 정의해야 합니다.