OMEKA 레코드 색인(record index) 에러 및 복구 방법

Omeka 시스템의 DB에 저장되는 레코드 유형에는 Item, File, Collection, Exhibit, Simple Page가 있습니다. 레코드를 등록하고 저장하고 검색하는 시스템에서는 일반적으로 검색을 위한 색인(Index) 테이블이 존재합니다. 만약 이 색인 테이블에 문제가 생기는 경우 다음과 같은 현상이 일어날 수 있습니다.

1. 관리자모드의 기본 검색(전체 레코드 타입 검색) 시 일부만 검색되거나 검색이 되지 않음
2. Solr의 전체 레코드 검색 결과에 전체가 아닌 일부만 검색되어 출력됨
3. 관리자모드에서 레코드 인덱싱 기능이 정상 작동되지 않거나 서버 에러가 발생됨
4. csv export 플러그인의 목록 레코드 반출 기능이 작동하지 않음


다음과 같은 작업은 오메카의 기본 레코드 인덱스에 문제를 일으키거나 검색 결과 출력에 문제를 일으킬 수 있습니다.

1. CSV Import 작업시 여러 개의 csv 목록을 동시에 입수
    (하나의 목록 입수 프로세스가 끝나지 않은 상태에서 다른 목록을 동시에 입수 실행)
2. Avant Relationships 플러그인이 활성화되어 있는 상태에서 레코드 인덱싱 수행
3. Solr Search 플러그인이 활성화되어 있는 상태에서 레코드 인덱싱 수행
4. MySQL 콘솔에서 오메카용 데이터베이스(DB) 생성시 캐릭터세트를 정하지 않거나 비 유니코드 방식으로 캐릭터세트가 생성된 경우

1번의 CSV Import 작업을 통해 입수 프로세스가 실행되면 아이템 같은 레코드가 하나씩 등록될 때마다 오메카의 검색용 레코드 색인 테이블(omeka_search_texts)에 아래와 같은 필드 값이 저장됩니다.

id(일련번호), record_type(레코드유형), record_id(레코드 아이디), public(공개설정), title(제목), text(내용)

image

그런데 만약 레코드 색인에 문제가 생기면 시스템 상에서 수동으로 레코드 색인을 재실행하더라도 레코드 색인 테이블은 정상적으로 업데이트 되지 않고 기존 레코드 정보만 보이게 됩니다.
이미 문제가 생긴 색인 테이블에는 신규 레코드가 입수되더라도 해당 필드 정보가 저장되어 업데이트 되지 않게 됩니다.
그렇게 되면 시스템 상에서 해당 신규 레코드는 검색을 하더라도 검색 결과에 걸리지 않게 됩니다.
검색용 색인 테이블에 해당 값들이 존재하지 않기 때문에 검색이 되지 않는 것입니다.

또한 오메카 같은 시스템은 다양한 플러그인들을 설치하여 원하는 기능을 수행할 수 있도록 설정할 수 있는데 일부 플러그인들은 활성화 상태에서 레코드 색인 프로세스에 문제를 일으킬 수 있습니다.
플러그인 중 Avant Relationships 같은 레코드간의 관계 설정과 관련된 플러그인 또는 Solr 같이 검색용 레코드 색인 테이블에 기반하여 검색 제한을 걸고 원하는 결과값을 출력하도록 설정하는 플러그인은 레코드 색인에 문제를 일으킬 수 있음을 확인했습니다.

레코드 색인 테이블을 정상적으로 복구하는 방법은 다음과 같습니다.
아래의 단계에서 이미 설치 또는 설정이 되어 있는 경우엔 다음 단계로 넘어가시기 바랍니다.

1. php-cli 모듈 설치
$ sudo apt-get install php-cli
image


2. MySQL 콘솔 또는 phpMyAdmin 등을 사용해 오메카의 기본 검색용 레코드 색인(Index)가 들어있는 DB 테이블(omeka_search_texts)의 스토리지엔진 유형을 MyISAM에서 InnoDB로 변경.
변경 후에는 테이블 내용 비우기(Truncate) 옵션을 통해 기존 테이블의 내용만 삭제.

아래의 링크에서 변경 방법이 담긴 동영상을 내려받아서 확인하시거나 캡쳐 화면대로 따라해 보세요.

http://osasf.net/uploads/FileUpload/fb/ca519f318571b00518688b598e7a97.avi

image


3. 오메카 관리자 모드에서 Plugins(플러그인) 목록 중 Avant Common, Avant Relationships, Solr Search 플러그인이 활성화 상태로 되어 있는 경우 이들 모두 비활성화 상태로 변경


4. 오메카 관리자 모드에서 Settings(설정)의 Search 탭에서 우측의 "Index Records" 버튼 클릭
image

5. 2번의 phpMyAdmin에서 omeka_search_texts 테이블을 다시 클릭한 후 레코드 색인이 복구되었는지 확인.
    예를 들어 시스템에 등록된 아이템이 100개인데 아이템 레코드가 100개가 보이지 않고 그 이하나 일부만 나타나는 경우엔 색인이 정상 복구되지 않은 것이라고 할 수 있습니다. 마찬가지로 simple pages 레코드를 10개 등록했는데 이 테이블에서 일부만 보인다면 이 또한 정상 복구되지 않은 것입니다.


6. 레코드 색인이 정상 복구되었다면 3번의 비활성화한 플러그인을 다시 활성화


7. 오메카 관리자 모드에서 기본 레코드 검색을 다시 수행해 보고 검색이 잘 되는지 확인
    또는 Solr 검색 결과 출력 페이지에서 검색 결과 수와 오메카 관리자 모드의 등록된 레코드의 수를 비교 검토.

[ 예시 : 레코드 색인 복구 전 검색 결과 ]

image

[ 예시 : 레코드 색인 복구 후 검색 결과 ]

image


[ 예시 : 레코드 색인 복구 후 Solr 검색 결과 및 Solr 콘솔 관리 모드의 검색 결과 ]

image



omeka_search_texts 테이블.jpg
992 x 308 - 245K
오메카관리자모드에서 레코드 인덱싱하기.jpg
1021 x 601 - 347K
검색 에러.jpg
818 x 240 - 129K
검색 성공.jpg
822 x 342 - 159K
솔라-레코드인덱스복구후.jpg
1079 x 574 - 170K
코멘트에 접속 혹은 등록.