[해외] 특허 인덱스 설정과 매핑-②

Ariul·2022년 9월 26일
0
post-thumbnail

6주 동안 실전 프로젝트를 진행하면서 학습한 내용을 기록하고, 팀의 리더로서 프로젝트 매니징 경험을 기록하는 시리즈입니다.


비영어권 인덱스 매핑 정의

PUT non-english-test4
{
  "settings": {
    "index": { //1️⃣샤드 수는 클러스터 설계가 완료된 후 변경할 계획입니다.
      "number_of_shards": 1,
      "number_of_replicas": 1
    },
    "analysis": {
      "analyzer": { // 2️⃣애널라이저
        "non_english_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "stopword"]
        },
        "number_analyzer" : {
          "type" : "pattern",
          "pattern" :"[.]"
        },
        "country_analyzer": {
          "tokenizer": "standard",
          "filter": ["synonym"]
        }
      },
      "filter": { // 3️⃣ 토큰 필터
        "synonym": {
          "type": "synonym",
          "synonyms_path": "user_dic/non_eng_syn.txt"
        },
        "stopword" : {
          "type" : "stop",
          "stopwords_path" : "user_dic/non_eng_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": "non_english_analyzer", 
        "fields": {
          "keyword": {
          "type": "keyword",
          "ignore_above": 256
          }
        }
      },
      "국가": {
        "type": "text",
        "analyzer": "country_analyzer" 
      },
      "요약": {                  
        "type": "text",
        "analyzer": "non_english_analyzer"
      },
      "출원번호": {
        "type": "keyword"
      },
      "출원인": {
        "type": "text",
        "analyzer": "non_english_analyzer", 
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "출원일자": {
        "type": "text",
        "analyzer": "number_analyzer",
        "fields": {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }
}

1. 샤드 설정은 클러스터 설계가 완료된 후 변경할 예정.

2. Analyzer

2.1. non_english_analyzer

[발명의명칭], [출원인], [요약] 필드의 데이터에 custom analyzer를 적용하였습니다.

토크나이저는 standard이고, 토큰 필터는 lowercase, stopword를 사용하였습니다.

2.2. number_analyzer

[출원일자] 필드의 데이터는 ‘2022.09.21’의 형태를 가집니다.

그 중에서 연도(2022)만 추출하기 위해 패턴 “[.]”을 기준으로 텍스트를 분리하는 패턴 애널라이저를 적용했습니다.

2.3. country_analyzer

[국가] 필드의 데이터는 ‘RU(러시아), DK(덴마크)’ 등의 국가코드입니다.

한국어로 검색할 수 있도록 하기 위해 국가 코드를 한국어로 치환하였습니다.

3. Token Filter

3.1. synonym

국가 코드를 한국어로 치환하는 동의어 사전을 만들고, 경로를 지정하였습니다.

# sysnonyms setting in sysnonyms.txt

# replacement
RU => 러시아
AT => 오스트리아
DK => 덴마크
PT => 포르투갈
CH => 스위스
PL => 폴란드
SI => 슬로베니아
CO => 콜롬비아
EA => 유라시아
RS => 세르비아

3.2. stopword

루씬에 이미 정의된 불용어 리스트를 모아서 불용어 사전을 만들고, 경로를 지정하였습니다.

4. 필드에 데이터 타입 매핑

  • [출원번호] : keyword
  • [출원일자] : text, keyword
  • [발명의명칭] : text, keyword
  • [출원인] text, keyword
  • [IPC분류] text
  • [CPC분류] text
  • [공고번호] keyword
  • [공개번호] keyword
  • [등록번호] keyword
  • [국가] text
  • [요약] text
profile
정성과 진심을 담아 흔적을 기록하자💡

0개의 댓글