Header

  1. View current page

    권남이의 스프링노트

Profile_img_60x60_01
59

Solr

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>

History

Last edited on 07/09/2007 10:10 by kwon37xi

Comments (0)

You must log in to leave a comment. Please sign in.