πŸ”— λ™μ˜μ–΄ 처리 (synonym filter)

이 λ¬Έμ„œλŠ” Elasticsearchμ—μ„œ λ™μ˜μ–΄(synonym) λ₯Ό μ²˜λ¦¬ν•˜μ—¬
λ‹€μ–‘ν•œ ν‘œν˜„μ„ ν•˜λ‚˜μ˜ 의미둜 검색할 수 μžˆλ„λ‘ ν•˜λŠ” μ „λž΅μ„ μ„€λͺ…ν•©λ‹ˆλ‹€.


βœ… 1. λ™μ˜μ–΄ ν•„ν„°λž€?

μ‚¬μš©μžκ°€ “검색"이라고 μž…λ ₯ν–ˆμ„ λ•Œ
“μ„œμΉ˜”, “μ°ΎκΈ°”, “검색” λ“± μ—¬λŸ¬ ν‘œν˜„μ„ λ™μ‹œμ— 검색할 수 μžˆλ„λ‘ λ§Œλ“œλŠ” ν…μŠ€νŠΈ ν™•μž₯ ν•„ν„°μž…λ‹ˆλ‹€.


πŸ”„ 2. λ™μ˜μ–΄ 처리 μ˜ˆμ‹œ

μž…λ ₯μ–΄ν™•μž₯된 검색어
검색검색, μ„œμΉ˜, μ°ΎκΈ°
μžλ™μ°¨μ°¨λŸ‰, μΉ΄, μ˜€ν† λͺ¨λ°”일

βš™οΈ 3. analyzer에 λ™μ˜μ–΄ filter μ„€μ • (inline 방식)

{
  "settings": {
    "analysis": {
      "filter": {
        "synonym_filter": {
          "type": "synonym",
          "synonyms": [
            "검색, μ„œμΉ˜, μ°ΎκΈ°",
            "μžλ™μ°¨, μ°¨λŸ‰, μ˜€ν† λͺ¨λ°”일"
          ]
        }
      },
      "analyzer": {
        "synonym_analyzer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "synonym_filter"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "synonym_analyzer"
      }
    }
  }
}

πŸ“„ 4. 파일 기반 λ™μ˜μ–΄ 처리

λŒ€μš©λŸ‰ λ™μ˜μ–΄ 사전은 파일둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

예: config/synonyms.txt

검색, μ„œμΉ˜, μ°ΎκΈ°
μžλ™μ°¨, μ°¨λŸ‰, μ˜€ν† λͺ¨λ°”일

μ„€μ •:

"synonym_filter": {
  "type": "synonym",
  "synonyms_path": "synonyms.txt"
}

⚠️ νŒŒμΌμ„ μˆ˜μ •ν•œ 경우, μ—˜λΌμŠ€ν‹± λ…Έλ“œ μž¬μ‹œμž‘ λ˜λŠ” μž¬μΈλ±μ‹± ν•„μš”


πŸ” 5. 검색 쿼리 μ˜ˆμ‹œ

{
  "query": {
    "match": {
      "title": "μ°ΎκΈ°"
    }
  }
}
  • 찾기둜 검색해도 검색, μ„œμΉ˜κ°€ ν¬ν•¨λœ λ¬Έμ„œλ„ 검색됨

βœ… μš”μ•½

ν•­λͺ©μ„€λͺ…
λ™μ˜μ–΄ μ²˜λ¦¬λ‹€μ–‘ν•œ ν‘œν˜„μ„ ν•˜λ‚˜λ‘œ ν™•μž₯ν•˜μ—¬ 검색 컀버 κ°•ν™”
방식inline 방식 / 파일 방식
μœ„μΉ˜analyzer λ‚΄ filter둜 μ§€μ •
μ‚¬μš© μ‹œ 주의파일 κΈ°λ°˜μ€ μž¬μ‹œμž‘ λ˜λŠ” μž¬μΈλ±μ‹± ν•„μš”