1. 필요한 라이브러리 설치
django-elasticsearch-dsl과 mysqlclient를 설치했다.
pip install django-elasticsearch-dsl django-elasticsearch-dsl-drf mysqlclient
2. Elasticserach 설정 및 도커 이미지 다운로드
Elasticsearch 인스턴스를 설치하고 실행해야 한다.
로컬 환경에서 테스트한다면, 공식 Elasticsearch Docker 이미지를 사용할 수 있다.
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.0
터미널에 아래 명령어를 입력해 Elasticserach Docker 이미지를 다운로드한다.
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0
Docker 이미지는 컨테이너를 생성하는 데 필요한 모든 파일과 설정을 포함한 불변의 파일 시스템 스냅샷이다.
이미지는 읽기 전용 템플릿이며, 컨테이너는 이 이미지의 실행 인스턴스이다. 즉, 이미지는 앱을 실행하는 데 필요한 모든 것을 담고 있고, 컨테이너는 실제로 실행 중인 앱이라고 보면 된다.
다운로드한 이미지를 기반으로 컨테이너를 실행한다.
http://localhost:9200/"로 접속하여 컨테이너가 성공적으로 실행되었는지 확인한다.
서버의 기본 정보를 JSON 형태로 반환한 결과가 나타날 것이다.
MySQL에 csv 파일 넣기
mysql workbench -> schema 생성하기 -> table 배너 마우스 오른쪽 클릭으로
elasticsearch 초기 보안설정
C:\elasticsearch\elasticsearch-8.14.1-windows-x86_64\elasticsearch-8.14.1\bin>elasticsearch-reset-password -u elastic
warning: ignoring JAVA_HOME=C:\Program Files\Java\jdk-17.0.4.1; using bundled JDK
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: CvqzzSwdo3mKDB9rPcY7
C:\elasticsearch\elasticsearch-8.14.1-windows-x86_64\elasticsearch-8.14.1\bin>
MySQL 서버 구동
C:\Windows\system32>cd C:\Program Files\MySQL\MySQL Server 8.0\bin
C:\Program Files\MySQL\MySQL Server 8.0\bin>net start mysql
요청한 서비스가 이미 시작되었습니다.
NET HELPMSG 2182을(를) 입력하면 도움말을 더 볼 수 있습니다.
Django와 mySQL 연동
https://hae-ong.tistory.com/25
windows에 mecab 설치 (elasticserach에서 사용할 한국어 형태소분석기)
[ settings.py ]
프로젝트 전체 설정 관리 (DB, App 등록, middleWare, 템플릿 경로, 보안설정 등)
특히 데이터베이스와 Elasticserach의 설정 정보가 중요.
[ __init__.py ]
앱 기본 설정 지정. 'Apps.py'에서 정의된 앱 설정 클래스를 Django는 이 파일을 통해 앱의 초기 설정을 로드함.
[ apps.py ]
앱의 설정을 관리 및 앱이 준비되었을 때 초기 작업을 수행함.
-> MySQL에서 기사 내용 로드하고 이를 사용해 tf-idf 벡터라이저 초기화
-> 이 파일은 앱 시작시 한 번 실행되어 DB에서 데이터 가져오고, tf-idf 벡터라이저 준비
[ models.py ]
MySQL 데이터베이스와의 상호작용을 위한 모델을 정의함. 기사의 데이터 모델을 Django ORM을 통해 정의함.
아래 명령어로 DB 스키마 가져와서 models.py에 붙여넣기
python manage.py inspectdb
[ search.py ]
Elasticsearch와의 연동을 관리하고, MySQL에서 로드한 데이터를 Elasticsearch에 인덱싱함.
또한 tf-idf를 사용해 텍스트 데이터의 벡터를 생성함.
-> 즉, RDB에서 데이터 로드하고 Elasticserach 인덱스를 생성/업데이트하는데 사용함.
[ urls.py ]
앱의 url 경로를 정의함. 사용자의 HTTP 요청을 처리할 뷰 함수에 연결해줌.
즉, 사용자의 웹 요청을 'views.py'의 적절한 뷰 함수로 라우팅한다.
[ views.py ]
사용자의 입력을 받아 elasticserach를 통해 유사 기사를 검색하고, 결과를 웹페이지에 반환한다.
실행 흐름
1. 사용자가 웹페이지를 통해 특정 텍스트를 입력한다.
2. views.py의 search_articles 함수는 사용자의 입력을 받아 elasticsearch에서 유사 기사를 검색한다.
3. 검색 결과가 사용자에게 웹페이지를 통해 반환된다. 결과에는 기사의 title, content, link가 포함된다.