개발일기

Elasticsearch 활용한 검색엔진 만들기 (2) 본문

프로그래밍 이론/Python

Elasticsearch 활용한 검색엔진 만들기 (2)

한민기 2021. 8. 17. 20:23
반응형

docker-compose.yaml 

-> OS에 상관 없이 똑같은 코드를 돌릴 수 있게 도와주는 시스템이다.

 

파일 내부를 살펴보면 엘라스틱 서치, mySQL, wordpress 의 서비스 3개를 로드 하는 것을 확인할 수 있다.

 

docker-compose.yaml 파일의 형태는 공식 홈페이지에서 예시를 확인할 수 있다.

예제 링크 : https://docs.docker.com/compose/

 

Overview of Docker Compose

 

docs.docker.com

 

#검색 기능 추가

엘라스틱 서치는 인덱스 또는 색인 하나만 서빙하는 것이 아니라 여러 가지 색인을 따로 따로 만들어서 제공할 수 있게 디자인 되어 있다. 따라서 각 색인을 만들 때마다 인덱스를 만드는 과정이 필요하다.

 

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html

 

Index API | Elasticsearch Guide [7.14] | Elastic

The external_gte version type is meant for special use cases and should be used with care. If used incorrectly, it can result in loss of data. There is another option, force, which is deprecated because it can cause primary and replica shards to diverge.

www.elastic.co

 

여러가지 파라미터를 제공해 주지만 궁극적으로 PUT, POST를 사용하여 인덱스를 생성한다.

 

예제의 일부 코드이다.

url = "http://localhost:9200/products"

여기서 9200번 포트는 docker-compose.yaml 파일에서 엘라스틱서치를 로드한 포트 번호이다.

그리고 9200포트에서 새로운 인덱싱인 products라는 인덱스를 만들기 위해 엔드포인트를 만들어 놨다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
payload = json.dumps({
    "settings": {
        "index": {
            "number_of_shards"1,
            "number_of_replicas"1
        },
        "analysis": {
            "analyzer": {
                "analyzer-name": {
                    "type""custom",
                    "tokenizer""keyword",
                    "filter""lowercase"
                }
            }
        }
    },
 
cs

인덱싱에 진행될 payload 이다. payload는 json 방식으로 body에 들어가게 된다.

엘라스틱 서치가 요구하는 방식으로 json 포멧으로 셋팅 되어있다.

 

number_of_shards : 인덱스 즉 색인을 나누는 분산 숫자 / ex) 100 으로 설정시 색인을 100개로 나누어 진다.

number_of_replicas : shard가 데이터를 가지면 shard에 대한 복제본을 만드는 것. 즉, Availability를 위해 존재하는 것

 

위의 코드를 실행해보면 products라는 인덱스가 생성된 것을 확인할 수 있다.

 

 

또한 GET 쿼리를 보내어 엘라스틱서치의 인덱스가 존재한 다는 것을 확인할 수 있다.

 

 

#Ingestion pipline

getPostings () : 워드 프레스가 있는 mySQL에 연결하여 제품 페이지들을 추출하여 Product post array로 리턴해주는 함수이다.

여기서 Productpost array는 엘라스틱서치에 있는 인덱스 요소들을 mapping한 파이썬 class 이다.

 

구현한 파이프라인을 실행한 후 이전에 실행했던 check_index.py를 실행시킨다면

매핑된 데이터들이 생긴 것을 확인할 수 있다.

 

직접 URL에 장미라는 검색어를 검색하면 2가지의 포스팅이 돌아온다.

 

#search.php

php 파일의 일부이다. 

es_search_url을 보면 위에서 사용했던 엔드포인트와 동일한 url이다. 

이번엔 9200번 포트가 아닌 기존의 8000번 포트에서 search.php 파일을 불러와 인덱싱 된 값을 불러온다.

 

위에서 여러 문자로 인덱싱된 값을들 데이터베이스에 있는 값들로 정리하여 보여준다. 

즉 엘라스틱 서치를 통해서 검색결과를 돌려주는 페이지이다.

 

강의 한줄 후기 : 

강의를 따라하면서 정리한 페이지이지만 엘라스틱서치라는 것에대해 이론적으로 좀더 자세히 알아야 할 것같다.

 

강의 출처 : 실리콘밸리 시리즈 : Elasticsearch로 하루만에 고급 검색 엔진 만들기

https://fastcampus.co.kr/svs_online_search

 

실리콘밸리 시리즈 : Elasticsearch로 하루만에 고급 검색 엔진 만들기 | 패스트캠퍼스

현직 실리콘밸리 검색엔지니어와 검색 엔진을 만들고 고급 검색 기술을 적용하여 검색 품질을 향상시키는 법을 학습합니다

fastcampus.co.kr

 

반응형
Comments