opensearch로 한국어 검색 환경을 구축할 수 있는 eunjeon Plugin 설치
opensearch에 eunjeon plugin이 설치된 Docker image builder
# download plugin bash <(curl -s https://raw.githubusercontent.com/Karoid/opensearch-seunjeon/main/scripts/downloader.sh) -e <opensearch-version> -p <plugin-version> 에제) $ bash <(curl -s https://raw.githubusercontent.com/Karoid/opensearch-seunjeon/main/scripts/downloader.sh) -e 2.3.0 -p 2.3.0.0 # install plugin $(dirname $(which opensearch))/opensearch-plugin install file://`pwd`/opensearch-analysis-seunjeon-<plugin-version>.zip 예제) $ $(dirname $(which opensearch))/opensearch-plugin install file://`pwd`/opensearch-analysis-seunjeon-2.3.0.0.zip
- downloader.sh 가 하는 일은 opensearch-analysis-seunjeon-.zip 파일을 내려받은 후 plugin-descriptor.properties 의 opensearch.version 을 변경하여 재압축합니다.
- opensearch가 버전 업 될때마다 플러그인을 재배포하는데 어려움이 있어 스크립트를 제공합니다.
| opensearch-analysis-seunjeon | target opensearch | release note |
|---|---|---|
| 2.3.0.0 | 2.3.0 |
docker hub에서 받아서 사용하는 경우
docker run -d -p 9200:9200 --rm -v opensearch:/usr/share/opensearch/data -e "discovery.type=single-node" karoid/opensearch-seunjeon:2.3.0.0프로젝트로 빌드해서 사용하는 경우
docker build . --tag opensearch-seunjeon docker run -d -p 9200:9200 --rm -v opensearch:/usr/share/opensearch/data -e "discovery.type=single-node" opensearch-seunjeon
version: "3.9" services: elasticsearch: image: karoid/opensearch-seunjeon:2.3.0.0 environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - opensearch:/usr/share/opensearch/data ports: - 9200:9200
| opensearch-analysis-seunjeon | target opensearch | release note |
|---|---|---|
| 1.3.6.0 | 1.3.6 | Compatible with opensearch 7.10 |
| 2.3.0.0 | 2.3.0 |
도커의 경우 opensearch 컨테이너에 들어간다.
curl -XPUT --insecure -u admin:admin 'https://localhost:9200/test/' -H 'Content-Type: application/json' -d '{ "settings" : { "index":{ "analysis":{ "analyzer":{ "korean":{ "type":"custom", "tokenizer":"seunjeon_default_tokenizer" } }, "tokenizer": { "seunjeon_default_tokenizer": { "type": "seunjeon_tokenizer", "index_eojeol": false } } } } }, "mappings": { "properties" : { "text" : { "type" : "text", "analyzer": "korean" } } } }' curl -XGET --insecure -u admin:admin 'https://localhost:9200/test/_analyze?pretty=true' -H 'Content-Type: application/json' -d '{"analyzer": "korean","text": "아버지가 방에 들어간다"}'
이렇게 입력했을 때 다음 응답이 나오면 제대로 설치가 된 것이다
{
"tokens" : [
{
"token" : "아버지/N",
"start_offset" : 0,
"end_offset" : 3,
"type" : "N",
"position" : 0
},
{
"token" : "방/N",
"start_offset" : 5,
"end_offset" : 6,
"type" : "N",
"position" : 1
},
{
"token" : "들어가/V",
"start_offset" : 8,
"end_offset" : 11,
"type" : "V",
"position" : 2
}
]
}만약 opensearch 버전이 올라가고 opensearch-seunjeon 프로젝트에 최신 버전의 플러그인 코드가 공개된다면 다음 명령으로 플러그인을 다시 빌드할 수 있습니다.
mkdir -p build docker run -it --name plugin-builder -v $(pwd)/build:/tmp/build -v $(pwd)/scripts:/tmp/scripts mozilla/sbt:8u292_1.5.7 bash # container bash 진입 > dictionary 생성 chmod 700 /tmp/scripts/* /tmp/scripts/zip-builder.sh # zip 생성 cd /tmp/build/seunjeon-opensearch && sbt sbt:opensearch-analysis-seunjeon> project opensearch sbt:opensearch-analysis-seunjeon> opensearchZip
다음 명령이 성공하면 build/opensearch-analysis-seunjeon/seunjeon-opensearch/opensearch/target/opensearch-analysis-seunjeon-assembly-2.3.0.jar에 파일이 만들어진다
만약 opensearchZip을 빌드할 때 사용하는 opensearch의 버전을 올리고 싶으면 zip-builder.sh의 다음 두 부분의 2.3.0을 변경하면 된다
sed -i '/val opensearchVersion = "1.0.0"/c\val opensearchVersion = "2.3.0"' build.sbt sed -i '/val opensearchJarVersion = "1.0.0-beta1"/c\val opensearchJarVersion = "2.3.0"' build.sbt
seunjeon: 한국어 형태소분석기를 elasticsearch에 사용할 수 있도록 만든 plugin입니다.
opensearch-seunjeon: 기존의 elasticsearch에서 사용 가능하던 한국어 형태소 분석기를 opensearch에서 사용할 수 있도록 변경한 plugin입니다.