작성
·
69
0
개발환경 : WSL 기반의 리눅스 + 엘라스틱 서치
spring boot : 3.5
톰캣 서버를 구동하면 아래와 같은 에러가 발생합니다.
request [HEAD http://localhost:9200/products] returned [HTTP/1.1 404 Not Found]
2025-06-19T09:34:18.201+09:00 DEBUG 15492 --- [ restartedMain] org.elasticsearch.client.RestClient : request [PUT http://localhost:9200/products] returned [HTTP/1.1 400 Bad Request]
인덱스를 생성하는 구문에서 에러가 발생하는데 이유를 살펴보면 아래와 같이 나옵니다.
[illegal_argument_exception] failed to build synonyms from ['product_synonyms' analyzer settings
product-settings.json 파일에 설정한 product_synonyms 부분에서 에러가 발생하고 있습니다.(혹시 잘못 작성했을까 해서 강사님의 github 파일을 복사했습니다.)
---------------------------------------------------------------------------------------------
[해결해보기]
products_name_analyzer에서 product_synonyms 를 제거한 후 서버를 구동하면 서버는 문제없이 구동됩니다.
"products_name_analyzer": {
"char_filter": [],
"tokenizer": "nori_tokenizer",
"filter": ["nori_part_of_speech", "nori_readingform", "lowercase"]
},
엘라스틱서치에 가서 확인해 보면 인덱스는 생성 되었으나 한글이 깨지는 상황입니다.
"analysis": {
"filter": {
"product_synonyms": {
"type": "synonym",
"synonyms": [
"samsung, �궪�꽦",
"apple, �븷�뵆",
"�끂�듃遺�, �옪�깙, 而댄벂�꽣, computer, laptop, notebook",
"�쟾�솕湲�, �쑕���룿, �빖�뱶�룿, �뒪留덊듃�룿, �쑕���쟾�솕, phone, smartphone, mobile phone, cell phone",
"�븘�씠�룿, iphone",
"留λ턿, 留�, macbook, mac"
]
}
},
[질문1] product_synonyms 필터가 적용된 상태에서 서버를 구동하는 부분 에러
[질문2] 한글 깨짐 에러
답변 2
0
안녕하세요, jinkyung park님 ! 질문 잘 해주셨어요 😄
질문 주신 내용에 대해 하나씩 답변드려볼게요 !!
"한글 깨짐 에러"
-> 첫번째 질문과 같은 원인으로 한글이 제대로 인식되지 못하고 있네요 ~
UTF-8 인코딩이 아닌 상태에서 Elasticsearch에 전달된것 같아요 !
우선 cat product-settings.json
명령어를 통해
파일의 한글 내용이 깨져 보이는지 확인해보시길 바랍니다 ~
추가로 리눅스 환경에서 인코딩 관련 디버깅에 도움이 될만한 레퍼런스를 남겨 놓으니
참고하시면 좋을 것 같습니다 !!
https://louky0714.tistory.com/154
제가 알려드린 키워드 토대로 디버깅하신 뒤 혹시 안 되시면 댓글 한 번 달아주세요~!!
0
안녕하세요, 인프런 AI 인턴입니다. jinkyung park님!
Elasticsearch와 Spring Boot를 연동하여 인덱스를 설정하고, 동의어 필터와 관련된 문제로 고민이 많으신 것 같습니다. 이 두 가지의 메인 이슈, 즉 “product_synonyms 필터 적용 에러”와 “한글 깨짐 문제”에 대해 설명드리겠습니다.
에러 원인 및 해결 방법:
동의어 필터 적용 오류: illegal_argument_exception
오류는 주로 동의어 파일의 경로나 형식이 잘못되었을 때 발생합니다. 동의어 필터를 사용하기 위해서는 동의어를 정의한 파일 경로가 Elasticsearch 서버가 접근 가능한 위치에 있어야 하며, 올바른 형식을 가지고 있어야 합니다.
설정 확인하기: product_synonyms
필터에 사용되는 설정을 다시 한 번 확인해 보세요. Elasticsearch의 설정에서는 동의어 파일의 절대 경로 또는 적절한 리소스 경로가 필요할 수 있습니다.
{
"index": {
"analysis": {
"filter": {
"product_synonyms": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt" // 파일 시스템의 접근 경로
}
}
}
}
}
synonyms_path
의 정확한 경로를 설정해주셔야 하는데, Elasticsearch 서버가 있는 위치에서 접근 가능한 파일 위치입니다.한글 깨짐의 원인 및 해결 방법:
인코딩 문제 확인: 한글 깨짐은 주로 인코딩 설정의 불일치로 발생합니다. JSON 설정 파일과 동의어 파일이 모두 UTF-8로 인코딩 되어 있는지를 체크하세요.
Elasticsearch 설정 확인: Elasticsearch에서 한글을 처리할 때 Nori tokenizer 및 filter를 사용하는 것이 일반적입니다. 이를 통해 한글이 올바르게 인코딩되고 처리될 수 있도록 설정하세요. 한글이 깨지는 경우, 브라우저나 출력창의 인코딩 설정도 다시 한번 점검해 보시기 바랍니다.
{
"settings": {
"analysis": {
"analyzer": {
"products_name_analyzer": {
"tokenizer": "nori_tokenizer",
"filter": [
"nori_part_of_speech",
"nori_readingform",
"lowercase",
"product_synonyms" // 확인 및 적용
]
}
}
}
}
}
위의 방법들을 통해 문제를 해결하시는 데 도움이 되셨으면 합니다. 추가적으로 궁금한 점이나 해결되지 않는 부분이 있다면 언제든지 추가 질문 부탁드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
이 첫번째 에러는
[illegal_argument_exception] failed to build synonyms from ['product_synonyms' analyzer settings
필터의 순서를 변경하니까 해결됐습니다. 그런데 여전히 한글은 깨지네요