# 엘라스틱 서치 mapping 관련 문제 ### monstache 프로그램을 통해 mongoDB와 동기화 - 이때 인덱스가 자동으로 생성된다. - nori 형태소 분석기가 기본 툴이 아니라 다운을 받아야 하고, 인덱스 생성할 때 설정을 해줘야 한다. - 인덱스에 속성을 새로 추가해주는 것은 가능하지만, 변경은 불가능 하다고 한다. - mapping안 properties에 각 필드에 analyzer을 nori로 설정해줘야 하지만, monstache가 자동으로 index를 만들어 주기 때문에 설정할 수 없었다. ### analyzer - 각 properties에 analyzer을 설정해주면 한글 검색시 형태소를 분석하여 검색결과를 보여준다. - 삭제후 새롭게 정의하고 데이터를 다른 인덱스에 옮겨두었다가 다시 받아오는 방법과, _analyzer로 형태소 분석을 한뒤 그 값으로 검색을 하는 두가지 방법을 떠올렸다. - 가장 좋은 방법은 쉘 스크립트를 만들어 먼저 인덱스를 생성해놓고 사용하는 방법이 좋을 것 같은데 가능할 지 모르겠다.... - 어떤 방법이 좋을지 상의해 보면 좋을 것 같다. ### 해결방법 - 초기 도커셋팅을 한다고 가정하였을 때, db에 데이터가 없기 때문에 도커를 실행시켰을 때, 인덱스가 생성되지 않을 것이다. - 인덱스 만드는 요청을 쉘 스크립트로 작성해두고, 엘라스틱서치가 구동이 완료 되었을 때 쉘 스크립트를 실행시켜 인덱스를 만드는 방법은 어떨까? - 엘라스틱서치가 실행 완료된 시점을 알면 완전 자동화도 가능할 것 같다. - curl로 인덱스 생성 요청을 보내는 쉘 스크립트를 작성 ``` #!/bin/bash curl -X PUT http://127.0.0.1:9200/post -d '{"settings": {"index":{"analysis":{"analyzer":{"korean":{"type":"custom","tokenizer":"nori_user_dict"}},"tokenizer":{"nori_user_dict":{"type":"nori_tokenizer","decompound_mode":"mixed"}}}}},"mappings":{"properties":{"category":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"images":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"price":{"type":"long"},"title":{"type":"text","analyzer":"korean","fields":{"keyword":{"type": "keyword","ignore_above": 256}}},"uploadTime": {"type": "date"}}}}' -H 'Content-Type:application/json' ``` ###### tags: `trouble shooting`