HTML로 구성된 웹문서를 색인하기 위해서는 기본적으로 HTML테그의 내용을 제거하는 필터링 작업이 필요하다.
solr는 이미 HTMLStripWhitespaceTokenizerFactory라는 HTML의 테그를 제거하고 색인할 수 있는 방법을 제공한다.

schema.xml파일
<
fieldType name="html" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.HTMLStripWhitespaceTokenizerFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>


하지만, 위의 그림과 같이 한글의 경우에는 space단위로 token이 나누어 지기 때문에 CJKTokenizerFactory와 같은 검색결과를 얻을 수가 없다.
하여, solr 1.3에서 새롭게 추가된 NGramFilterFactory를 추가로 이용하여 ngram색인을 해보기로 하였다.
schema.xml파일
<
fieldType name="html" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.HTMLStripWhitespaceTokenizerFactory" />
<filter class="solr.NGramFilterFactory" maxGramSize="2" minGramSize="1"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" maxGramSize="2" minGramSize="1"/>
</analyzer>
</fieldType>

CJKTokenizerFactory와 같지는 않지만 그런대로 결과는 만족!!!

하지만, 영문도 ngram을 해버리기 때문에 다소 실망하기도 하였다.
(영문까지 ngram처리하면 색인어가 너무 많아짐으로...)


하지만, 이 정도는 (영문은 stemming하도록) solr 소스를 살짝만 바꾸면 아주 쓸만한 색인 환경을 구축할 수 있을 것으로 판단된다.



참고로 query에 WhitespaceTokenizerFactory를 쓴 이유는 보통의 경우라면 검색시에 html테그가 들어갈 일이 없기 때문이다.

 

+ Recent posts