파이썬을 이용한 Solr의 커스텀 필터 및 토크나이저 개발 방법

Solr은 오픈 소스 검색 플랫폼으로, 텍스트 기반의 데이터를 색인화하고 검색 및 분석할 수 있습니다. Solr은 다양한 토크나이저, 필터 및 토큰 변환기를 제공하여 텍스트를 처리하고 색인화하는 작업을 지원합니다.

이번 포스트에서는 파이썬을 사용하여 Solr에서 사용할 수 있는 커스텀 필터와 토크나이저를 개발하는 방법을 알아보겠습니다.

Solr 커스텀 필터 개발

Solr 커스텀 필터를 개발하기 위해서는 solr.TokenFilterFactory 클래스를 상속받아 필터링 로직을 구현해야 합니다. 아래는 간단한 예제 코드입니다.

from org.apache.lucene.analysis.tokenfilter import TokenFilter
from org.apache.lucene.analysis.tokenfilter import TokenStream
from org.apache.lucene.analysis.tokenattributes import CharTermAttribute

class CustomFilter(TokenFilter):
    def __init__(self, input: TokenStream):
        super().__init__(input)
        self.term = self.addAttribute(CharTermAttribute.class_)
    
    def incrementToken(self) -> bool:
        if self.input.incrementToken():
            termText = self.term.toString()
            
            # 필터링 로직 구현
            filteredTerm = self.customFilterMethod(termText)
            
            self.term.setEmpty().append(filteredTerm)
            
            return True
        
        return False
        
    def end(self):
        self.input.end()
        super().end()
        
    def close(self):
        self.input.close()
        super().close()
        
    def customFilterMethod(self, termText: str) -> str:
        # 필터링 로직 구현 코드
        # 입력받은 termText를 기반으로 필터링을 수행하여 결과를 반환
        return filteredTerm

위 코드에서는 org.apache.lucene.analysis.tokenfilterorg.apache.lucene.analysis.tokenattributes 패키지에서 필요한 클래스들을 import하여 사용합니다. CustomFilter 클래스는 TokenFilter 클래스를 상속받아 필터링 로직을 구현합니다. incrementToken 메서드에서 필터링을 수행하며, customFilterMethod 메서드에서 실제로 필터링을 수행하는 로직을 작성합니다.

Solr 커스텀 토크나이저 개발

Solr 커스텀 토크나이저를 개발하기 위해서는 solr.TokenizerFactory 클래스를 상속받아 토크나이징 로직을 구현해야 합니다. 아래는 간단한 예제 코드입니다.

from org.apache.lucene.analysis.tokenizer import Tokenizer
from org.apache.lucene.analysis.tokenattributes import CharTermAttribute

class CustomTokenizer(Tokenizer):
    def __init__(self, input: Reader):
        super().__init__(input)
        self.term = self.addAttribute(CharTermAttribute.class_)
        self.buffer = None
    
    def close(self):
        self.input.close()
        
    def incrementToken(self) -> bool:
        if self.buffer is not None:
            self.term.setEmpty().append(self.buffer)
            self.buffer = None
            return True
        
        return False
    
    def setReader(self, input: Reader):
        self.input = input
        
    def customTokenizeMethod(self):
        # 토큰화 로직 구현 코드
        # 입력받은 텍스트를 토큰으로 분리하여 반환
        return tokens

위 코드에서는 org.apache.lucene.analysis.tokenizer 패키지에서 필요한 클래스들을 import하여 사용합니다. CustomTokenizer 클래스는 Tokenizer 클래스를 상속받아 토크나이징 로직을 구현합니다. incrementToken 메서드에서 토크나이징을 수행하며, customTokenizeMethod 메서드에서 실제로 토크나이징을 수행하는 로직을 작성합니다.

Solr에서 이러한 커스텀 필터와 토크나이저를 사용하려면 solrconfig.xml 파일을 수정하여 해당 필터와 토크나이저를 등록하면 됩니다.

이렇게 파이썬을 이용하여 Solr의 커스텀 필터와 토크나이저를 개발하는 방법을 알아보았습니다. 이를 통해 Solr의 텍스트 처리 기능을 더욱 확장하고 다양한 필터 및 토큰 변환기를 개발할 수 있습니다.

참고: Solr 공식 문서