728x90
반응형
Elasticsearch에 데이터를 넣고, search로 검색을 하면 내가 쓰건 검색엔진과 똑같겠지? 라고 생각하면 오산이다.
기본적인 setting으로는 'ai'는 'ai'만 검색할 수 있고, 'llm'이나 'gpt'같은 유사하게 사용되는 단어는 검색할 수 없다.
혹시나 'ai는'이 포함된 글을 검색하는 것도 불가능하다. 그렇다면 Elasticsearch에서 이러한 동의어는 어떻게 처리할까?
기본 설정에서의 'ai' 검색
- index 설정 및 document 삽입
# synonyms_test index 생성
PUT /synonyms_test
# _bulk API를 통해 동시에 여러개의 document 삽입
POST /synonyms_test/_bulk
{ "index": { "_id": 1 } }
{ "description": "ai는 자주 사용되는 기술이다." }
{ "index": { "_id": 2 } }
{ "description": "llm은 생성형 모델이다." }
- query를 통한 'ai' 검색
GET /synonyms_test/_search
{
"query":{
"match":{
"description": "ai"
}
}
}
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
- query를 통한 'ai는' 검색
{
"query":{
"match":{
"description": "ai는"
}
}
}
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.6548753,
"hits": [
{
"_index": "synonyms_test",
"_id": "1",
"_score": 0.6548753,
"_source": {
"description": "ai는 자주 사용되는 기술이다."
}
}
]
}
}
동의어 설정 후 'ai' 검색
- /elasticsearch/config/synonyms.txt (파일을 통한 동의어 관리는 elasticsearch 재시작이 필수)
ai, llm
- icu_tokenizer plugin 설치 (다국어 tokenizer)
/elasticsearch-plugin install analysis-icu
- 동의어 설정 및 index 생성
PUT /synonyms_test
{
"settings": {
"analysis": {
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms_path": "synonyms.txt"
}
},
"analyzer": {
"synonym_analyzer": {
"tokenizer": "icu_tokenizer",
"filter": ["lowercase", "synonym_filter"]
}
}
}
},
"mappings": {
"properties": {
"description": {
"type": "text",
"analyzer": "synonym_analyzer"
}
}
}
}
- 동의어 설정 후 'ai' 검색
{
"query":{
"match":{
"description": "ai"
}
}
}
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.31223935,
"hits": [
{
"_index": "synonyms_test",
"_id": "2",
"_score": 0.31223935,
"_source": {
"description": "llm은 생성형 모델이다."
}
},
{
"_index": "synonyms_test",
"_id": "1",
"_score": 0.30141023,
"_source": {
"description": "ai는 자주 사용되는 기술이다."
}
}
]
}
}
동의어 설정
- ai, llm은 서로가 양방향으로 교차되어 검색될 수 있음을 의미한다.
- => 을 사용하면 화살표 방향으로 단어를 대체한다는 의미이다.
- 파일 형식으로(동의어사전) 동의어를 관리하면 재시작이 필수적이다.
'데이터엔지니어링' 카테고리의 다른 글
Data Lake, Data Warhouse, Data Mart (0) | 2025.02.28 |
---|