본문으로 바로가기

Solr 스키마

category 색인/Apache Solr 2017. 10. 24. 11:45
반응형

schema.xml


1. Schema의 정의

- 데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 것

데이터베이스를 구성하는 데이터 개체, 속성, 관계 및 제약조건 등에 관해 전반적으로 정의함

- 스키마는 데이터 사전에 저장되며 메타 데이터라고도 불린다.


2. Solr의 schema.xml (http://wiki.apache.org/solr/SchemaXml)

The schema.xml file contains all of the details about which fields your documents can contain, and how those fields should be dealt with when adding documents to the index, or when querying those fields.

(schema.xml 파일은 문서가 포함하는 필드들에 관한 상세한 모든 것들을 포함한다. 그리고 색인하거나 필드들을 쿼링할 때 그 필드들이 어떻게 다루어질 것인지도 포함한다.)

- schema.xml은 <schema>태그라는 부모노드로 시작하며 크게 3가지 부분으로 나누어 생각할 수 있다.

<types>태그 부분 / <fields>태그 / 그리고 기타 설정을 위한 태그부분

1) <types>

<fieldtype> 태그의 리스트들을 포함한다. 텍스트, 문자열, 다양한 숫자 타입 등 필요한 모든 기본 타입을 이 영역에 정의한다.

2) <fields>

인덱싱을 위한 필드들을 이 영역에 정의한다.

<field>태그의 속성들

- name : 필드의 이름을 지정

- type : <types>태그 영역에 지정된 기본 타입 중 하나를 지정

- indexed : 색인(indexing)할지 안할지의 여부를 지정. true이면 검색이 가능하며, 정렬이 가능하다.

- stored : 검색하는 동안 값을 되돌려받고 싶다면 true로 지정

- multiValued : 다중값의 허용여부를 지정. true이면 해당 필드는 한 document에서 여러 개의 값을 가질 수 있음.

- required : 필수 입력 사항의 필드라면 true로 지정

- compressed : true이면 gzip을 이용하여 데이터를 압축해서 저장함

<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="subject" type="text_general" indexed="true" stored="true"/>
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="comments" type="text_general" indexed="true" stored="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>
<field name="keywords" type="text_general" indexed="true" stored="true"/>
<field name="category" type="text_general" indexed="true" stored="true"/>
<field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="last_modified" type="date" indexed="true" stored="true"/>
<field name="links" type="string" indexed="true" stored="true" multiValued="true"/>

<dynamicField>

- <field>의 name을 찾지 못했을 경우 dynamicField는 일련의 패턴을 제공하여 찾지 못한 name과 패턴이 매치되는지 확인하고 매치된다면 사용되는 field이다.

<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_l" type="long" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_d" type="double" indexed="true" stored="true"/>


3) 기타 영역

<uniqueKey> : 고유키 설정하기

고유키로 지정된 필드는 중복된 값이 인덱스에 존재할  없고만약 인덱싱 시에 동일한 값이 이미 존재한다면오래된 문서에 대한 인덱싱정보는 삭제되고 새로운 정보가 남게 된다.

<uniqueKey>id</uniqueKey>

<defaultSearchField> : 기본 검색 필드 설정

검색  특정 필드가 지정되지 않은 겨우 기본적으로 검색 대상이  필드를 설정한다.

<defaultSearchField>text</defaultSearchField>

<solrQueryParser> : 검색 연산자 지정

복수개의 단어 검색  적용할 연산자를 설정한다.

(AND -> 모든 단어를 포함, OR –> 하나 이상의 단어를 포함한 컨텐츠 검색)

<solrQueryParser defaultOperator="OR"/>

<copyField> : 멀티 인덱싱 설정

copyField는 하나의 필드를 다른 곳에 복사하고 동시에 document는 색인을 추가한다.

copyField는 같은 필드를 다르게 색인하거나 보다 빠르고 쉬운 검색을 위해 여러개의 필드를 하나의 필드에 추가하기 위해 사용된다.

여러 개의 필드를 하나의 필드처럼 사용해야  경우에 아래와 같이 설정한다.

<copyField source="cat" dest="text"/>
<copyField source="name" dest="text"/>
<copyField source="manu" dest="text"/>
<copyField source="features" dest="text"/>
<copyField source="includes" dest="text"/>
<copyField source="manu" dest="manu_exact"/>

추가내용 - 필터 매핑 설정하기

WEB-INF/web.xml 파일에서 아래처럼 디스패처 필터의 매핑 설정을 추가한다.

<filter>

<filter-name>SolrRequestFilter</filter-name>

<filter-class>org.apache.solr.servlet.SolrDispatchFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>SolrRequestFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

Solr의 indexing과 검색의 작동 절차

- Client로부터 요청이 발생하면 HTTP를 통해 Solr 웹 애플리케이션으로 요청을 넘겨준다.

- 요청을 받으면 Solr는 적합한 SolrRequestHandler를 선택하여 요청을 처리한다.

- 요청 처리 후에 응답을 다시 HTTP로 넘겨준다. (응답의 포맷은 XML과 그 외의 여러가지 형태가 있다)

Solr Index를 업데이트 하기 위한 XML 메세지

- Solr는 XML 메세지로 Add/Replace, Commit, Delete 작업을 수행할 수 있음.

(url/update를 사용해서 => http://localhost:8080/solr/update 처럼..)

- schema.xml과 혼동하지 않도록 주의한다!!

[예시 - Add/Replace를 위한 XML]

<add>
<doc>
<field name="employeeId">05991</field>
<field name="office">Bridgewater</field>
<field name="skills">Perl</field>
<field name="skills">Java</field>
</doc>
[<doc> ... </doc>[<doc> ... </doc>]]
</add>

- <add> 태그의 부수적인 속성들

1) overwrite : 디폴트는 true, true면 새로운 document가 이전의 document를 대신함. 고유키(uniqueKey)는 동일함.

2) commitWithin : document가 추가될 시간을 지정. 밀리세컨드단위로 시간을 지정하면 지정한 시간 내에 document가 추가됨.

[예시 - delete를 위한 XML]

- ID나 Query를 통해서 document를 삭제함.

(ID는 일반적으로 schema에서 정의된 uniqueKey가 되면 본 예시에서는 employeeId가 ID라고 볼 수 있다.)

<delete><id>05991</id></delete>
<delete><query>office:Bridgewater</query></delete>

[update 하기 - cURL을 이용하거나 GET방식을 이용]

- GET방식

http://localhost:8983/solr/update?stream.body=%3Cdelete%3E%3Cquery%3Eoffice:Bridgewater%3C/query%3E%3C/delete%3E
http://localhost:8983/solr/update?stream.body=%3Ccommit/%3E

반응형

'색인 > Apache Solr' 카테고리의 다른 글

Apache Solr 쿼리  (0) 2018.08.09
SOLR 한글 웹문서 색인을 위한 Tokenizer, Filter세팅방법  (0) 2017.10.24