검색엔진 Meilisearch v1

00_8_3·2023년 7월 19일
0

엘라스틱서치

목록 보기
1/4
post-thumbnail

밀리서치

여느 때와 같이 긱뉴스와 오픈채팅방에서 밀리서치에 대해 알게되어
간단하게 사용방법을 알아보았습니다.

밀리서치는 엘라스틱서치와 같은 검색엔진 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 <마스터키>"를 헤더에 넣어 사용하자

Bulk Insert

아래 문서를 참고로 실행해 본 결과
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

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

이 글을 읽고 많이 배웠습니다.

답글 달기