Solr

Lucene을 Java API가 아닌 HTTP 호출을 통해서 사용할 수 있게 만든 서비스.

  • 때문에 모든 언어에서 Solr를 통해 Lucene을 사용하는 것이 가능해지고,
  • 여러 WAS에서 Solr 단일 인스턴스에 검색/인덱싱 가능.(확장성이 좋아진다)
  • 기본적으로 모든 요청과 응답은 HTTP GET/POST 를 통해서 XML로 이루어 진다.
  • "솔라"

언어별 응답

응답을 받을 때는 각 언어별로, 언어별 데이터 형으로 받는 것이 가능하다. 또한 언어별 Client 라이브러리가 제공된다.

  • JSON
  • Python : 2007년 6월 말 현재, Solr 1.2와 호환 안되는 상태임. 확인할 것. 살짝 고치면 잘 작동함.
  • Ruby
  • Java의 경우에는 example을 확인할것.

한글 처리

한글 검색을 위해서는 CJKTokenizer를 사용해야 하는데, 현재 Solr 1.2에는 CJKTokenizerFactory가 들어있지 않다.

  • CJKTokenizerFactory.java : 링크 아래 파일을 컴파일하여 Solr WEB-INF/classes 에 넣어주고 재시작 한다.
  1. package org.apache.solr.analysis;

    import java.io.Reader;
    import org.apache.lucene.analysis.cjk.CJKTokenizer ;
    import org.apache.lucene.analysis.TokenStream;
    import org.apache.solr.analysis.BaseTokenizerFactory;

    /**
    * CJKTokenizer for Solr
    * @see org.apache.lucene.analysis.cjk.CJKTokenizer
    * @author matsu
    */
    public class CJKTokenizerFactory extends BaseTokenizerFactory {

    /**
    * @see org.apache.solr.analysis.TokenizerFactory#create(Reader)
    */
    public TokenStream create(Reader input) {
    return new CJKTokenizer( input );
    }
    }
  • Tokenizer Factory를 인덱싱이 필요한 FieldType에 추가하고, Filter로 StopFilterFactory와 WordDelimiterFilterFactory 를 추가해줘야 한다.
  1. <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class="solr.CJKTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    </analyzer>
    <analyzer type="query">
    <tokenizer class="solr.CJKTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
    </analyzer>
    </fieldType>

출처 : http://kwon37xi.springnote.com/pages/335478

+ Recent posts