검색엔진/Solr
솔라(Solr) 색인
ZzangHo
2022. 2. 25. 13:43
728x90
색인이란?
검색엔진의 경우 색인(Indexing)이라는 작업을 하게 되는데 쉽게 말해서 검색엔진에서 데이터를 읽을 수 있도록 검색엔진에 맞춰 데이터를 저장한다고 보면 될 것 같다.
색인의 경우 여러 타입을 줄 수가 있는데 Solr의 경우 자세히 한번 살펴봐야 할 것 같다.
검색엔진에서 역색인이라는 용어가 등장을 하는데 이것은 흔히 책을 펴보면 맨 뒷장에 어떤 키워드가 몇번째 쪽에 있는지를 기록한 것 처럼 형태소 단위로 분해 된 단어를 Document ID와 매핑시켜 놓는 것을 말한다.
일단 여기서는 기본 string 타입으로만 색인을 할 예정이다.
색인 방법
여기서 진행 해 볼 방법은 data-import handler를 이용한 db 색인이다.
data-import handler를 이용한 DB 색인은 대량의 데이터를 색인할때 굉장히 유용한 방법이니 학습해두면 큰 도움이 될 것으로 생각된다.
색인 시작
색인 할 Database를 생성한다.( 필자의 경우 공공데이터포탈에서 데이터를 다운받아 DB에 넣었다)
https://dev.mysql.com/downloads/connector/j/ 에서 mysql connector 를 다운받아 solr-8.7.0/dist 로 이동시킨다.
solr-8.7.0/server/solr/test/conf 폴더에 data-config.xml 파일을 만들고 아래 코드를 입력한다.
<dataConfig>
<!-- DB 설정 -->
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/covid"
user="????"
password="???????????"/>
<document name="sample">
<entity name="COVID_DATA" query="select idx,addr,date,company,reporter,cate1,cate2,cate3,accident1,accident2,accident3,ner_person,ner_company,keyword,specificity,link from covid_data">
<field column="idx" name="id"/>
<field column="addr" name="addr"/>
<field column="date" name="date"/>
<field column="company" name="company"/>
<field column="reporter" name="reporter"/>
<field column="cate1" name="cate1"/>
<field column="cate2" name="cate2"/>
<field column="cate3" name="cate3"/>
<field column="accident1" name="accident1"/>
<field column="accident2" name="accident2"/>
<field column="accident3" name="accident3"/>
<field column="ner_person" name="ner_person"/>
<field column="ner_company" name="ner_company"/>
<field column="keyword" name="keyword"/>
<field column="specificity" name="specificity"/>
<field column="link" name="link"/>
</entity>
</document>
</dataConfig>
- solr-8.7.0/server/solr/test/conf 폴더에 solrconfig.xml 파일을 열고 아래 코드를 추가한다. ( 다운받은 mysql connector의 경로를 잡아줌)
```xml
<!-- Add Option :: DB IMPORT 하기 위한 설정 -->
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-\d.*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
solr-8.7.0/server/solr/test/conf 폴더에 managed-schema 에 필드를 추가한다.
<!-- Add LeeChangHo :: field -->
<field name="addr" type="string" indexed="true" stored="true"/>
<field name="date" type="string" indexed="true" stored="true"/>
<field name="company" type="string" indexed="true" stored="true"/>
<field name="reporter" type="string" indexed="true" stored="true"/>
<field name="cate1" type="string" indexed="true" stored="true"/>
<field name="cate2" type="string" indexed="true" stored="true"/>
<field name="cate3" type="string" indexed="true" stored="true"/>
<field name="accident1" type="string" indexed="true" stored="true"/>
<field name="accident2" type="string" indexed="true" stored="true"/>
<field name="accident3" type="string" indexed="true" stored="true"/>
<field name="ner_person" type="string" indexed="true" stored="true"/>
<field name="ner_company" type="string" indexed="true" stored="true"/>
<field name="keyword" type="string" indexed="true" stored="true"/>
<field name="specificity" type="string" indexed="true" stored="true"/>
<field name="link" type="string" indexed="true" stored="true"/>
bin/solr restart -p 8983 명령어로 재시작한 후 dataimport 메뉴에 들어간 후 Excute 한다.
query 메뉴에서 db정보가 잘 들어왔는지 확인한다.