6주 동안 실전 프로젝트를 진행하면서 학습한 내용을 기록하고, 팀의 리더로서 프로젝트 매니징 경험을 기록하는 시리즈입니다.
⇒ 결론: 영어권, 비영어권, 일본으로 인덱스를 분리하기로 결정하였습니다.
<인덱스 1 - 영어권>
미국, 유럽, PCT, 중국, 영국, 독일, 프랑스, 호주, 캐나다, 대만, 이스라엘, 스페인, 필리핀, 스웨덴
<인덱스 2 - 비영어권>
러시아, 오스트리아, 덴마크, 포르투갈, 스위스, 폴란드, 슬로베니아, 콜롬비아, 유라시아, 세르비아
<인덱스 3>
일본
🤔 중국, 유럽, 프랑스, 독일, 이스라엘, 스페인, 스웨덴이 영어권 인덱스에 있는 이유
동의어는 색인 시에 또는 검색 시에 사용될 수 있는 분석기에서 사용됩니다. 보통 색인 시에 동의어를 사용하면 다음과 같은 장단점이 있습니다.
색인 시 동의어 사용
보통 검색 시에 동의어를 사용하면 다음과 같은 장단점이 있습니다.
검색 시 동의어 사용
일반적으로, 검색 시 동의어 사용의 장점은 보통 색인 시 동의어를 사용할 때 얻을 수 있는 약간의 성능 상의 이득보다 앞선다고 평가합니다.
하지만 우리 프로젝트에서는, 국가 필드에서만 동의어를 사용하며 그마저도 용어를 대체(⇒)하는 것이기 때문에 색인 시 동의어 사용에 큰 단점이 없다고 판단했습니다. 또한, [국가] 필드는 필터의 기능만 하며, 굳이 search_analyzer를 따로 사용할 필요가 없다고 판단하여 색인 시 동의어를 사용하기로 결정하였습니다.
해당되지 않는 국가는 파일에 포함하지 않는 게 맞다고 생각하여 영어권 동의어 사전과 비영어권 동의어 사전으로 분리하기로 결정하였습니다. 일본의 경우, 따로 동의어 사전 파일을 만들지 않고, synonyms
항목에서 직접 동의어 목록을 입력하기로 하였습니다.
PUT english-test3
{
"settings": {
"index": { //1️⃣샤드 수는 클러스터 설계가 완료된 후 변경할 계획입니다.
"number_of_shards": 1,
"number_of_replicas": 1
},
"analysis": {
"analyzer": { // 2️⃣애널라이저
"english_analyzer": {
"tokenizer": "standard",
"filter": ["lowercase", "stopword", "my_snow"]
},
"number_analyzer" : {
"type" : "pattern",
"pattern" :"[.]"
},
"country_analyzer": {
"tokenizer": "standard",
"filter": ["synonym"]
}
},
"filter": { // 3️⃣ 토큰 필터
"my_snow": {
"type": "snowball",
"language": "English"
},
"synonym": {
"type": "synonym",
"synonyms_path": "user_dic/my_syn_dic.txt"
},
"stopword" : {
"type" : "stop",
"stopwords_path" : "user_dic/stopwords.txt"
}
}
}
},
"mappings": {
"properties": { //4️⃣ 필드에 데이터 타입 매핑
"CPC분류": {
"type": "text"
},
"IPC분류": {
"type": "text"
},
"event": {
"properties": {
"original": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"log": {
"properties": {
"file": {
"properties": {
"path": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
},
"공개번호": {
"type": "keyword"
},
"공고번호": {
"type": "keyword"
},
"등록번호": {
"type": "keyword"
},
"발명의명칭": {
"type": "text",
"analyzer": "english_analyzer",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"국가": {
"type": "text",
"analyzer": "country_analyzer"
},
"요약": {
"type": "text",
"analyzer": "english_analyzer"
},
"출원번호": {
"type": "keyword"
},
"출원인": {
"type": "text",
"analyzer": "english_analyzer",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"출원일자": {
"type": "text",
"analyzer": "number_analyzer",
"fields": {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
[발명의명칭], [출원인], [요약] 필드의 데이터에 custom analyzer를 적용하였습니다.
토크나이저는 standard이고, 토큰 필터는 lowercase, stopword, snowball을 사용하였습니다.
[출원일자] 필드의 데이터는 ‘2022.09.21’의 형태를 가집니다.
그 중에서 연도(2022)만 추출하기 위해 패턴 “[.]”을 기준으로 텍스트를 분리하는 패턴 애널라이저를 적용했습니다.
[국가] 필드의 데이터는 ‘US(미국), AU(호주)’ 등의 국가코드입니다.
한국어로 검색할 수 있도록 하기 위해 국가 코드를 한국어로 치환하였습니다.
snowball은 보통 ~ing, ~s 등을 제거하여 문장에 쓰인 단어들을 기본 형태로 변경합니다.
language 파라미터를 English로 설정하였습니다.
국가 코드를 한국어로 치환하는 동의어 사전을 만들고, 경로를 지정하였습니다.
# sysnonyms setting in sysnonyms.txt
# replacement
US => 미국
EP => 유럽
WO => PCT
CN => 중국
GB => 영국
DE => 독일
FR => 프랑스
AU => 호주
CA => 캐나다
TW => 대만
IL => 이스라엘
ES => 스페인
PH => 필리핀
SE => 스웨덴
캐나다 데이터에 있는 문자 ‘â’와 검색에 불필요한 용어를 제거하기 위해 불용어 사전을 만들고, 경로를 지정하였습니다.
â
.â
a
an
and
are
as
at
be
but
by
for
if
in
into
is
it
no
not
of
on
or
such
that
the
their
then
there
these
they
this
to
was
will
with