여느 때와 같이 긱뉴스와 오픈채팅방에서 밀리서치에 대해 알게되어
간단하게 사용방법을 알아보았습니다.
밀리서치는 엘라스틱서치
와 같은 검색엔진 DB로rust
로 개발되었다.
JVM
을 사용하는 엘라스틱서치와 다르게 로우레벨로 만들어진 오픈소스여서 엘라스틱서치가 2GB의 메모리를 잡아먹는 동안 70MB를 사용한다는 엄청난 장점이 있습니다. (저는 700 KB라는 엄청나게 적은 메모리를 먹네요 ㄷㄷ)
version: '3'
services:
meilisearch:
container_name: meilisearch
image: getmeili/meilisearch:v1.2
environment:
- http_proxy
- https_proxy
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-masterKey}
- MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true}
- MEILI_ENV=${MEILI_ENV:-development}
- MEILI_LOG_LEVEL
- MEILI_DB_PATH=${MEILI_DB_PATH:-/data.ms}
ports:
- ${MEILI_PORT:-7700}:7700
volumes:
- ./data.ms:/data.ms
restart: unless-stopped
docker image가 제공이 되기 때문에 간단하게 실행이 가능하다.
첫 실행을 하는 경우 터미널에 master_key
를 로그에 찍어주는데
복사해서 따로 관리를 해야한다.
그 후 해당 키를 MEILI_MASTER_KEY
환경변수에 넣어주고 컨테이너를 재실행 해주면
gui에 접속후 키를 입력해서 사용이 가능해집니다.
엘라스틱서치와 비슷하게 curl
을 사용한 인덱스 생성 조회 수정 삭제 모두 다 지원되며
한국어 플러그인도 제공되어 검색이 잘된다.
curl \
-X POST 'http://localhost:7700/indexes' \
-H 'Content-Type: application/json' \
--data-binary '{
"uid": "movies",
"primaryKey": "id"
}'
문서에서는 --data-binary
를 사용하여 인덱스를 생성하는 예시를 보여주지만
Body에 넣어도 생성이 잘된다.
uid
: 인덱스 이름
primaryKey
: 프라이머리 인덱스 필드
권한문제가 있다면
"Authorization: Bearer <마스터키>"
를 헤더에 넣어 사용하자
아래 문서를 참고로 실행해 본 결과
delimiter character로는 ,
쉼표만 가능하다.
맨위의 필드명에 string
boolean
number
타입을 명시할수 있고
없으면 string
이 사용된다.
또 필드에 없는 값들은 null이 들어간다.
https://www.meilisearch.com/docs/learn/core_concepts/documents#csv
밀리서치의 장점은 서두에 적었듯이 적은 메모리 사용에 있고 오픈소스여서 무료로 사용이 가능하다. (MIT 라이센스 사용)
또 7700
포트로 접근하면 간단한 gui 환경을 제공해주어서 내가 생성한 인덱스의 데이터를 직접 검색해볼수 있고 hits
도 쉽게 확인 가능해서 좋다.
하지만 단점으로는 릴리즈 버전이 아직 1
버전 이어서 관련 자료가 적거나 엘라스틱서치에 비해 세부적인 커스텀이 부족하다.
1 엘라스틱 처럼 인덱스 도큐먼트 생성할 때 동적 맵핑이 된다고 하는데
확인을 안해봐서 모르겠다?
2 엘라스틱서치 처럼 동기화 하는 라이브러리가 있긴하다? 안써봄
https://github.com/long2ice/meilisync
mysql insert 뿐만 아니라 update도 sync가 잘 된다고 한다.
https://github.com/meilisearch/integration-guides/issues/20
추가 23-08-03
되긴하는데 밀리싱크 켜질 때만 동기화가 된다.
로그보면 그 이후 데이터도 검색하긴 하는것 같은데
동기화가 안된다. 에러로그만 뱉어서 이슈 남기고 기다리는 중
밀리싱크 어드민 페이지
https://github.com/long2ice/meilisync-admin
3 엘라스틱서치에는 random docs 조회기능이 아직 없는 듯하다.
https://medium.com/@eelcoluurtsema/retrieve-random-documents-from-meilisearch-a08d96d272d6
위 글에는 다른 방법이 있다고는 하는데 나는 안됀다?
온프렘 환경에서 검색엔진을 구현하고 싶은 경우
적은 컴퓨팅 리소스로 운영을 하고 싶은 경우
밀리서치를 사용하면 될것 같다.
https://www.meilisearch.com/docs/reference/api/indexes#create-an-index
이 글을 읽고 많이 배웠습니다.