인공지능 AI/검색시스템

[NLP/검색/Information Retrieval/아파치] 아파치 솔라 Apache Solr 를 통한 검색 서버 구현 실습

아파치 솔라는 아파치 루씬에 기반을 둔 강력하고, 고성능, 스레드 안전한 검색 서버다.

오픈 소스 엔터프라이즈 검색 서버.

 

 

솔라가 제공하는 기능:

- 색인 생성, 검색을 위한 쉬운 HTTP 기반의 프로토콜이나 자바 및 PHP, Ruby 등에 대한 클라이언트(Restful API를 사용)

- 성능 향상을 위한 고급 캐싱과 복제

- 패싯 브라우징

- 일치 강조(하이라이팅)

- 맞춤법 검사

- 분산 검색(NoSQL 데이터베이스)

- 아파치 티카를 사용한 콘텐츠 추출

 

https://kafka.apache.org/

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

아파치 설치하기

환경: Mac M1

 

brew install solr

homebrew를 이용하여 solr 설치한다.

 

solr start

다음과 같은 화면이 뜬다면 잘 설치된것! 해피 서칭! :)

 

http://localhost:8983/

접속하면

다음과 같은 화면이 뜬다.

 

 

brew를 통해 설치했기 때문에 설치경로는

/usr/local/opt/solr

아니면 

/opt/solr

에 있다.

 

* 참고로 brew로 설치한 앱 경로가 궁금하면

brew info 프로그램이름 

을 치면 된다.*

 

 

솔라 실행

코어 생성 - example 이름으로 만들었다.

코어가 생성된 것을 확인할 수 있다.

 

스키마에 쿼리를 추가할 수 있다.

 

 

간단하게 title을 만들어주었다.

 

Field는 데이터베이스의 Column과 비슷하다.

 

 

솔라는 클라이언트로부터  요청을 받으면 URL을 해석해서 요청을 적절한 SolrRequestHandler로 보낸다.

응답이 생성되고 나면 QueryResponseWriter 구현이 응답을 직렬화해서 클라이언트로 돌려보낸다.

 

솔라가 지원하는 응답형식은 XML, JSON, Ruby, PHP 같은 언어 등이다.

 

콘텐츠 처리: 아파치 솔라는 색인과 검색을 제공하는데 

색인은 하나 이상의 문서로 구성되고, 문서는 하나 이상의 필드로 구성된다.

필드는 이름, 콘텐츠 등 솔라에 알려주는 메타데이터로 구성된다. 

 

아파치 솔라의 필드 옵션:

- indexed: 색인되는 필드. 검색, 정렬 가능.

- stored: 저장되는 필드 콘텐츠. 색인에 저장.

- boost: 필드마다 가중치를 boost 비율 설정 가능. 보통 제목(title)필드 가중치가 boost 높음.

- multiValued: 문서에 같은 필드 중복 허용.

- omitNorms: 저장 공간 절약 위해 사용. 

 

아파치솔라를 오픈소스 OpenNLP로 실행해보기

 

OpenNLP: Solr OpenNLP는 OpenNLP tokenizer, an OpenNLP part-of-speech tagging filter, an OpenNLP phrase chunking filter, and an OpenNLP lemmatization filter 등 여러 분석 구성 요소를 제공한다. Solr은 이러한 분석 구성 요소 외에도 OpenNLP NER 모델을 사용하여 명명된 엔티티를 추출하는 업데이트 요청 프로세서를 제공한다.

 

이제 OpenNLP을 설정하는 방법을 살펴보자.

 

먼저 apache-opennlp-1.9.2-bin.zip.을 다운로드와 압축을 풀고,

 the URL 에서 lemmatizer training file 을 다운받고 이를 en-lemmatizer.dict로 저장하자.

 

1
opennlp LemmatizerTrainerME -model en-lemmatizer.bin -lang en -data /path/to/en-lemmatizer.dict -encoding UTF-8

 명령어를 치면 다음과 같은 화면이 뜬다.

 

 

 

ㅎㅎ..쉽지 않네..