Notice
Recent Posts
Recent Comments
관리 메뉴

πŸŒ²μžλΌλ‚˜λŠ”μ²­λ…„

solr ν•œκΈ€ λ™μ˜μ–΄ 처리 유의점 λ³Έλ¬Έ

검색엔진

solr ν•œκΈ€ λ™μ˜μ–΄ 처리 유의점

JihyunLee 2019. 10. 25. 11:19
λ°˜μ‘ν˜•

solr ν•œκΈ€λ™μ˜μ–΄ 처리 유의점


 

이 글은 μ•žμ˜ solrκ²€μƒ‰μ—”μ§„μ˜ 전체적인 흐름을 읽고 λ‚˜λ©΄ 더 μ •ν™•ν•˜κ²Œ μ΄ν•˜ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

λ™μ˜μ–΄ 처리 방법


solrλŠ” λ™μ˜μ–΄ 처리λ₯Ό analyzer μ˜ ν•„ν„°κΈ°λŠ₯μ€‘μ˜ ν•˜λ‚˜λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

 

 

 

μ•„λž˜ "text_ko" νƒ€μž…μ˜ ν•„λ“œνƒ€μž… μ •μ˜ λΆ€λΆ„μ—μ„œ 보면 anaylzer μ•ˆμ— tokenizerν•˜λ‚˜μ™€ filter μ—¬λŸ¬κ°œκ°€ μžˆλŠ”λ°

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <!-- ν•œκΈ€ ν† ν°ν™” -->
      <tokenizer class="solr.KoreanTokenizerFactory" outputUnknownUnigrams="false" decompoundMode="discard"/>
      <!-- λ™μ˜μ–΄ -->
      <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
      <!-- μ œμ™Έν•  λ‹¨μ–΄(쑰사) ν•„터링-->
      <filter class="solr.StopFilterFactory" words="stopwords.txt"/>
      <filter class="solr.KoreanPartOfSpeechStopFilterFactory"/>
      <filter class="solr.KoreanReadingFormFilterFactory"/>
      <!-- μ†Œλ¬Έμžλ‘œ λ³€ν˜• -->
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
 
  </fieldType>
cs

filter 쀑에

1
<filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
cs

 

이 필터이 λ°”λ‘œ λ™μ˜μ–΄(synonyms)λ₯Ό μ²˜λ¦¬ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

 

 

이 ν•„ν„°λŠ” synonyms.txt νŒŒμΌμ„ μ°Έμ‘°ν•˜μ—¬ λ™μ˜μ–΄ 처리λ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

 

이 파일의 μœ„μΉ˜λŠ” conf/synonyms.txt μž…λ‹ˆλ‹€.

 

 

 

λ™μ˜μ–΄ 처리 κΈ°λŠ₯


 

solrμ—λŠ” λ™μ˜μ–΄ 처리 방법이 두가지가 μžˆμŠ΅λ‹ˆλ‹€.

 

',' 둜 μ—°κ²°ν•˜λŠ” 방법

 

μ²«λ²ˆμ§ΈλŠ” μ‰Όν‘œ(,)둜 μ—°κ²°ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 방법은 μš°λ¦¬κ°€ μƒκ°ν•˜λŠ” **λ™μ˜μ–΄** 와 κ°€μž₯ μœ μ‚¬ν•©λ‹ˆλ‹€.

 

 

예λ₯Όλ“€μ–΄ conf/synonyms.txt에 μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜λ©΄

 

MB,mib,megabyte,megabytes

localhost:8983/solr/#/[core_이름] 에 μ ‘μ†ν•΄μ„œ, anlysis λ©”λ‰΄μ—μ„œ λ™μ˜μ–΄ 등둝이 잘 된 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

μ—¬κΈ°μ„œ SGF λŠ” SynonymGraphFilterFactory 둜, λ™μ˜μ–΄ ν•„ν„°λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ™μ˜μ–΄ ν•„ν„°λ₯Ό κ±°μΉ˜λ©΄μ„œ λ™μ˜μ–΄ 등둝이 잘 λœκ²ƒμ„ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

' => ' 둜 μ—°κ²°ν•˜λŠ” 방법

 

'=>' κΈ°ν˜ΈλŠ” *λ™μ˜μ–΄* 라기 λ³΄λ‹€λŠ” *μΉ˜ν™˜* 의 κ°œλ…μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€, λ”°λΌμ„œ,

 

 

pixima => pixma

 

둜 synonyms.txt 에 μž‘μ„±ν•˜λ©΄ pixima λΌλŠ” λ‹¨μ–΄λŠ” pixma 둜 μžλ™ μˆ˜μ •λ©λ‹ˆλ‹€.

 

 

 

 

화면을 보면, λ™μ˜μ–΄ ν•„ν„°(SGF)λ₯Ό κ±°μΉ˜λ©΄μ„œ pixma κ°€ pixima둜 μˆ˜μ •λœ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

ν•œκΈ€ μ²˜λ¦¬μ‹œ 주의점

 


 

 

μ˜μ–΄λ‘œ 된 글을 μ²˜λ¦¬ν•œλ‹€λ©΄ λ¬Έμ œκ°€ λ™μ˜μ–΄ 처리의 κΈ°λŠ₯에 문제점이 μ—†μ§€λ§Œ, ν•œκΈ€λ‘œ 된 λ¬Έμ„œλ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” λ™μ˜μ–΄ μ²˜λ¦¬μ— μ•½κ°„μ˜ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

 

 

특히 'ν•œκΈ€λ‘œ 된 μ˜μ–΄μ™Έλž˜μ–΄'와 μ˜μ–΄λ₯Ό λ™μ˜μ–΄λ‘œ λ“±λ‘ν•˜λŠ” λΆ€λΆ„μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

 

예λ₯Όλ“€μ–΄

 

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€,msa,MicroServiceArchitecture,λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ•„ν‚€ν…μ³,λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€,마이크둜 μ„œλΉ„μŠ€ 아킀텍쳐, microservice

 

μœ„μ™€ 같이 λ™μ˜μ–΄ 등둝을 ν•œλ‹€λ©΄

 

 

마이크둜 μ„œλΉ„μŠ€ 아킀텍쳐λ₯Ό κ²€μƒ‰ν•˜λ©΄ msa와 λ™μ˜μ–΄ 연결이 λ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ

 

 

 

μ‹€μ œλ‘œλŠ”

 

 

 

KT(ν•œκΈ€ tokenizer) λ₯Ό κ±°μΉ˜λ©΄μ„œ '마이크둜' κ°€ '마이크' ' 둜' 둜 λ‚˜λ‰˜μ–΄μ§€κ³ , '아킀텍쳐'도 'μ•„ν‚€ | 텍 | μΉ˜μ–΄'둜 ν˜•νƒœμ†Œ 뢄리가 λ˜μ–΄λ²„λ¦½λ‹ˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— SGF(λ™μ˜μ–΄ ν•„ν„°) λŠ” 'λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ•„ν‚€ν…μ³'λ₯Ό 찾지 λͺ»ν•˜κ³  λ„˜μ–΄κ°€ λ²„λ¦½λ‹ˆλ‹€.

 

 

KT(ν•œκΈ€ tokenizer)λŠ” '마이크둜' λ₯Ό micro κ°€ μ•„λ‹Œ by mic 둜 μ΄ν•΄ν•œ 것이죠

이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄μ„œ λ™μ˜μ–΄ 사전을 ν™œμš©ν•˜μ—¬, 문제λ₯Ό κ°œμ„ ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

λ™μ˜μ–΄ 사전을 ν™œμš©ν•˜λŠ” 방법

λ™μ˜μ–΄ 사전을 ν™œμš©ν•˜λŠ” 방식은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

'마이크, 마이크둜'와 'μ•„ν‚€, 아킀텍쳐, μ•„ν‚€ν…μ²˜'와같이 KT(ν•œκΈ€ tokenizer)λ₯Ό 거치며 λΆ„λ¦¬λœ 단어λ₯Ό λ‹€μ‹œ ν•©μ³μ£ΌλŠ” 것이죠

λ™μ˜μ–΄ νŒŒμΌμ— μ•„λž˜μ™€ 같이 μžˆμ—ˆλ‹€λ©΄

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€,msa,MicroServiceArchitecture,λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ•„ν‚€ν…μ³,λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€,마이크둜 μ„œλΉ„μŠ€ 아킀텍쳐, microservice

이 λ‚΄μš©μ„ μΆ”κ°€ν•΄μ€λ‹ˆλ‹€.

마이크, 마이크둜 μ•„ν‚€, 아킀텍쳐, μ•„ν‚€ν…μ²˜

λ§ˆμ΄ν¬λŠ” λ§ˆμ΄ν¬λ‘œμ™€ λ™μ˜μ–΄λ‘œ, μ•„ν‚€ λŠ” μ•„ν‚€ν…μ²˜μ™€ λ™μ˜μ–΄μΈκ²ƒμ„ μ•Œλ €μ£Όλ©΄, ν† ν¬λ‚˜μ΄μ €κ°€ λΆ„λ¦¬μ‹œμΌœλ²„λ¦° 단어듀이 λ‹€μ‹œ λΆ™κ²Œ λ©λ‹ˆλ‹€.

 

쑰금 보기 μ•ˆμ’‹κΈ΄ ν•˜μ§€λ§Œ, μ•„κΉŒμ™€λŠ” 달리 마이크둜 |μ„œλΉ„μŠ€ | 아킀텍쳐가 SGF(λ™μ˜μ–΄ ν•„ν„°)μ—μ„œ λ‹€μ‹œ μƒκ²¨λ‚œ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

검색 query 에 msaλ₯Ό 넣어보면, msa의 λ™μ˜μ–΄ 쀑 ν•˜λ‚˜μΈ '마이크둜 μ„œλΉ„μŠ€ 아킀텍쳐'와 맀칭이 λ˜μ–΄ 검색이 λ˜λŠ”κ²ƒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°κ³Ό

μ•„λž˜ ν™”λ©΄μ—μ„œ μ™Όμͺ½ 뢀뢄이 검색 '될' λŒ€μƒμ„ μž…λ ₯ν•˜λŠ” λΆ€λΆ„, 였λ₯Έμͺ½μ€ '검색어'λ₯Ό μž…λ ₯ν•˜λŠ” λΆ€λΆ„μž…λ‹ˆλ‹€.

검색 될 λŒ€μƒκ³Ό, 검색어 λͺ¨λ‘ analyzeλ₯Ό 거치게 λ©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰ 단계 (μ—¬κΈ°μ„œλŠ” LCF) 에 색칠 된 뢀뢄이 μžˆλ‹€λ©΄, μ΄λŠ” 'msa'의 κ²€μƒ‰κ²°κ³Όλ‘œ 'λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 아킀텍쳐'κ°€ λ‚˜μ˜¬ 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

πŸ‘

λ°˜μ‘ν˜•

'검색엔진' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

solr κ²€μƒ‰μ—”μ§„μ˜ 전체적인 흐름  (0) 2019.10.25
solr +μ€μ „ν•œλ‹’ μ„±λŠ₯  (0) 2019.09.27