개요
Wikipedia 커넥터는 Wikipedia 덤프 파일을 읽어서 그 페이지를 Fess 인덱스에 등록하는 기능을 제공합니다. Wikipedia, 다른 Wikimedia 프로젝트, 모든 MediaWiki 사이트의 덤프를 사용할 수 있습니다.
이 기능을 사용하려면 fess-ds-wikipedia 플러그인이 필요합니다.
지원하는 덤프
덤프 형식은 source 파라미터로 선택합니다.
source | 설명 |
|---|---|
cirrus | CirrusSearch 인덱스 덤프. Wikimedia가 각 위키에 대해 |
xml | MediaWiki XML 내보내기( |
auto | 기본값. cirrus_search_index 를 포함하거나 .json.bz2 또는 .json 으로 끝나는 위치는 cirrus 로, 그 외의 위치는 xml 로 읽습니다 |
덤프의 압축 형식(bzip2, gzip 등)은 내용에서 자동으로 판별되며, 압축되지 않은 파일도 읽을 수 있습니다.
전제조건
플러그인 설치가 필요합니다
HTTP(S) URL 또는 Fess 서버상의 경로로 덤프 파일에 접근할 수 있어야 합니다
크롤링 시간이 필요합니다. 큰 Wikipedia의 덤프는 수 기가바이트입니다. 먼저
limit를 지정하여 설정을 시험해 보세요
플러그인 설치
관리 화면의 “시스템” → “플러그인”에서 설치하거나, bin/fess-setup install plugin fess-ds-wikipedia 를 실행한 후 Fess 를 재시작합니다. 자세한 내용은 플러그인 를 참조하세요.
설정 방법
관리 화면에서 “크롤러” → “데이터 스토어” → “새로 만들기”에서 설정합니다.
기본 설정
| 항목 | 설정 예 |
|---|---|
| 이름 | Japanese Wikipedia |
| 핸들러 이름 | WikipediaDataStore |
| 활성화 | 켬 |
파라미터 설정
파라미터 목록
| 파라미터 | 필수 | 설명 |
|---|---|---|
url | 아니오 | 덤프의 위치. HTTP(S) URL, |
source | 아니오 | auto, cirrus, xml 중 하나(기본값: auto) |
limit | 아니오 | 이 페이지 수에서 처리를 종료합니다. 0 은 무제한입니다(기본값: 0). 소수의 페이지로 설정을 시험할 때 사용합니다 |
user_agent | 아니오 | 덤프를 다운로드할 때 전송하는 User-Agent 헤더. 지정하지 않으면 Fess 크롤러의 User-Agent 이름을 사용합니다 |
max_digest_length | 아니오 | digest 의 최대 문자 수(기본값: 100) |
total_entity_size_limit | 아니오 | XML 파서가 처리하는 엔터티의 총 크기 상한(바이트, 기본값: 100000000). source=xml 에만 적용됩니다 |
text_extractor | 아니오 | XML 덤프의 위키텍스트를 일반 텍스트로 변환하는 방법. sweble (기본값) 또는 regex. “XML 덤프의 일반 텍스트 변환”을 참조하세요 |
drop_templates | 아니오 | XML 덤프의 content 에서 텍스트를 제외할 템플릿 이름의 쉼표 구분 목록. * 은 모든 템플릿을 제외합니다 |
keep_templates | 아니오 | drop_templates 에 일치하더라도 텍스트를 남길 템플릿 이름의 쉼표 구분 목록 |
drop_captions | 아니오 | XML 덤프의 content 에서 이미지와 갤러리의 캡션을 제외합니다(기본값: false) |
CirrusSearch 덤프
CirrusSearch 덤프는 jawiki_content-20261004-00000.json.bz2 와 같은 번호가 붙은 청크로 공개됩니다. source=cirrus 에서는 url 에 쉼표로 구분한 목록을 지정할 수 있으며, 각 요소에는 다음을 지정할 수 있습니다:
단일 파일(HTTP(S) URL 또는 로컬 경로)
로컬 디렉터리: 이름이
.json.bz2또는.json으로 끝나는 디렉터리 내의 모든 파일을 이름 순으로 읽습니다/로 끝나는 HTTP(S) URL: 디렉터리 목록을 가져와서 이름이.json.bz2또는.json으로 끝나는 모든 파일을 이름 순으로 읽습니다
예를 들어 일본어판 Wikipedia의 콘텐츠 인덱스의 모든 청크를 읽으려면 다음과 같이 합니다:
참고
Wikimedia 서버에서는 오래된 날짜의 덤프가 삭제됩니다. 크롤링을 설정하기 전에 https://dumps.wikimedia.org/other/cirrus_search_index/ 의 목록에서 존재하는 날짜를 확인하세요.
스크립트 설정
사용 가능한 필드
스크립트에서는 다음 값을 참조할 수 있습니다.
| 필드 | 설명 |
|---|---|
id | 페이지 ID |
title | 페이지 제목 |
encodedTitle | MediaWiki 페이지 URL에서 사용하는 형식의 제목(공백은 _ 가 되고 그 외의 문자는 퍼센트 인코딩됩니다) |
content | 페이지의 일반 텍스트 |
digest | max_digest_length 문자로 줄인 content |
contentLength | content 의 길이 |
wikitext | 페이지의 위키텍스트(덤프에 포함된 경우) |
format, model | 페이지의 형식과 콘텐츠 모델 |
timestamp | 페이지의 타임스탬프 |
ns | 이름공간 번호 |
categories, links | 페이지의 분류와 링크 대상 페이지 |
redirect, redirectTitle | 페이지가 넘겨주기인지 여부와 그 대상 |
stub, disambiguation | 페이지가 토막글인지 여부와 동음이의 문서인지 여부 |
lang, host, site, url | 덤프의 위치에서 도출됩니다. “덤프의 위치에서 도출되는 값”을 참조하세요 |
source=cirrus 에서는 다음 값도 사용할 수 있습니다:
| 필드 | 설명 |
|---|---|
openingText | 페이지의 도입부 텍스트 |
headings | 제목(헤딩) |
externalLinks | 외부 링크 |
templates | 페이지가 사용하는 템플릿 |
redirects | 이 페이지로 넘겨주는 제목 |
auxiliaryText | 이미지 캡션 등의 보조 텍스트 |
weightedTags | 가중치가 있는 태그 |
wikibaseItem | Wikidata 항목 ID |
incomingLinks | 들어오는 링크 수 |
popularityScore | 인기도 점수 |
revisionId | 리비전 ID |
덤프의 위치에서 도출되는 값
lang, host, site, url 은 덤프의 이름에서 도출됩니다. jawiki-latest-pages-articles.xml.bz2 나 index_name=jawiki_content 같은 이름에서는 lang 이 ja, host 와 site 가 ja.wikipedia.org, url 이 https://ja.wikipedia.org/wiki/<인코딩된 제목> 이 됩니다. 이름에는 언어 코드 바로 뒤에 wiki, 그 바로 뒤에 -, _, . 중 하나가 이어지는 부분이 있어야 합니다. Wikiquote(jawikiquote-...) 같은 자매 프로젝트는 잘못된 호스트가 깨진 링크를 만들기 때문에 의도적으로 도출하지 않습니다.
경고
덤프 이름이 일치하지 않으면 host, site, url 은 설정되지 않고, url 에는 url 파라미터의 값, 즉 덤프의 위치가 남습니다. 스크립트에서 url 을 그대로 사용하면 모든 페이지가 같은 URL이 되어 크롤링 전체가 인덱스에서 한 건의 문서가 됩니다. 오류도 출력되지 않습니다. 이름을 바꾼 덤프나 다른 Wikimedia 프로젝트에서는 위 예제처럼 스크립트에서 URL을 조립하세요. 예: url="https://ja.wikiquote.org/wiki/" + encodedTitle
XML 덤프의 일반 텍스트 변환
source=xml 에서는 위키텍스트를 Sweble 위키텍스트 파서로 일반 텍스트로 변환합니다. 이름공간 이름은 내보내기의 <siteinfo> 에서 읽으므로, 이미지와 분류 구문은 어떤 언어([[ファイル:...]], [[Kategorie:...]])에서도, 고유한 이름공간 이름을 가진 위키에서도 인식됩니다. Sweble이 변환하지 못하는 페이지는 정규식으로 변환됩니다.
text_extractor=regex 는 모든 페이지를 정규식으로 변환합니다. 몇 배 빠르지만 중첩된 템플릿, 표, 여러 줄에 걸친 마크업이 텍스트에 남습니다.
기본적으로 모든 템플릿 인수의 텍스트(파라미터 이름은 제외)와 모든 이미지 및 갤러리의 캡션이 content 에 남으므로 그 텍스트도 검색할 수 있습니다. drop_templates, keep_templates, drop_captions 로 걸러낼 수 있습니다:
템플릿 이름은 MediaWiki가 해석하는 방식과 같게 비교됩니다. 첫 글자는 대소문자를 구분하지 않고, _ 는 공백과 같으며, Template: 접두사는 생략할 수 있습니다. 템플릿은 전개되지 않으므로 남긴 템플릿이 추가하는 것은 인수의 텍스트이며 MediaWiki가 렌더링하는 내용이 아닙니다. CirrusSearch 덤프에는 MediaWiki가 렌더링한 텍스트가 이미 포함되어 있으므로 이 파라미터들은 source=cirrus 에는 적용되지 않습니다.
사용 예
CirrusSearch 덤프로 일본어판 Wikipedia를 크롤링
파라미터:
스크립트:
XML 덤프로 일본어판 Wikipedia를 크롤링(출처 템플릿 제외)
파라미터:
스크립트는 “스크립트 설정”과 같습니다.
다른 Wikimedia 프로젝트(Wikiquote) 크롤링
덤프 이름 jawikiquote-... 에서는 host 와 url 이 도출되지 않으므로 스크립트에서 조립합니다.
스크립트:
문제 해결
색인되는 문서가 한 건뿐임
“덤프의 위치에서 도출되는 값”을 참조하세요. 스크립트가 모든 페이지에 대해 url 을 설정하고 있는지 확인합니다.
크롤링에 시간이 너무 오래 걸림
먼저
limit를 지정하여 설정을 확인합니다source=cirrus를 사용합니다. XML 덤프에서는text_extractor=regex를 사용합니다덤프를 Fess 서버에 배치하고 로컬 경로를 지정합니다
콘텐츠에 위키텍스트 마크업이 남음
CirrusSearch 덤프(source=cirrus)를 사용하세요. source=xml 에서 text_extractor=regex 는 중첩된 템플릿, 표, 여러 줄 마크업을 텍스트에 남기므로 sweble (기본값)을 사용하세요.
덤프를 읽을 수 없음
URL 또는 경로가 올바른지 확인합니다(CirrusSearch 덤프의 날짜가 서버에서 삭제되었을 수 있습니다)
디렉터리 URL은
/로 끝나는지, 그 안의 파일이.json.bz2또는.json으로 끝나는지 확인합니다로그에서 정확한 오류를 확인합니다
참고 정보
데이터스토어 커넥터 개요 - 데이터 스토어 커넥터 개요
데이터 저장소 크롤링 - 데이터 스토어 설정 가이드
플러그인 - 플러그인 관리 가이드