CirrusSearch 확장은 Elasticsearch를 사용하여 미디어위키에 대해 검색을 구현합니다.
ElasticSearch는 사전에 설치되어야 하는 독립-실행형 타사 소프트웨어입니다. 그것은 검색과 인덱싱 기능을 제공하는 데이터베이스 시스템이고, 더 빠른 검색 결과를 위해 위키의 모든 페이지의 현재 텍스트가 인덱싱됩니다. 미디어위키와 ElasticSearch 사이의 통신은 웹 서비스를 통해 이루어집니다.
이 페이지는 설치에 대한 것입니다. 설치가 완료된 후에, 사용법에 대해 Help:CirrusSearch를 참조하십시오.
Goals
- 설치를 어렵게 만드는 기본 종속성이 없음
- 유일한 의존성은 순수-PHP 미디어위키 확장과 Elasticsearch 자체입니다.
- 다른 미디어위키 확장으로 확장 가능한 위키 페이지에 대해 실시간에 가까운 검색 인덱스를 제공합니다.
- MWSearch가 사용자에게 제공한 모든 질의 옵션과 그 이상을 제공합니다.
Dependencies
PHP와 cURL
- PHP에 대해 표준 미디어위키 요구 사항 외에도, CirrusSearch는 cURL 지원을 갖도록 컴파일된 PHP를 요구합니다.
Elasticsearch
- Elasticsearch를 설치해야 합니다.
ElasticSearch의 모든 각 버전은 웹 서비스의 작동 방법을 변경하고, 호환성 문제를 일으킵니다. 현재 사용 중인 미디어위키 버전과 호환되는 ElasticSearch 버전을 설치해야 합니다:
- 미디어위키 1.29.x – 1.30.x는 ElasticSearch 5.3.x – 5.4.x를 요구합니다.
- 미디어위키 1.31.x – 1.32.x는 ElasticSearch 5.5.x – 5.6.x를 요구합니다.
- 미디어위키 1.33.x – 1.38.x는 ElasticSearch 6.5.x – 6.8.x를 요구합니다 (6.8.23+ 추천)
- MediaWiki 1.39.x+는 Elasticsearch 7.10.2를 요구합니다 (6.8.23+는 mw:Extension:CirrusSearch/ES6CompatTransportWrapper 호환성 레이어를 사용하여 가능합니다)
1.40 개발 버전에서 Elasticsearch 7.17.x 버전이 수 개월 동안 잘 작동하였습니다. 미래의 불확실성을 줄이기 위해, 현재는 위키피디아에서 사용하는 7.10.2 버전으로 동작 중입니다. |
OpenJDK와 같은 자바 설치가 추가적으로 필요함에 주의하십시오. 공식 Elasticsearch Docker 이미지 또는 자체 호스팅 버전을 사용하는 것이 가장 좋습니다. Amazon OpenSearch (이전의 Amazon Elasticsearch)와 같은 관리형 제품은 작동할 수 있지만 특성에 따라 추가 구성이 필요할 수 있습니다. 예를 들어 Amazon OpenSearch는 포트 443에서 HTTPS를 통한 Elasticsearch API 요청만 수신하므로 (즉, 기본 Elasticsearch 포트 9200을 노출하지 않음), TLS-활성화된 프록시 (예를 들어, Nginx)를 통해 CirrusSearch가 Amazon OpenSearch 클러스터와 통신할 수 있습니다.
- Elastica는 Elasticsearch와 대화할 수 있는 PHP 라이브러리입니다. 아래 지침에 따라 Elastica를 설치하십시오.
Other
- CirrusSearch 확장에 의한 실제 작업 처리로 인해, Notice: unserialize(): Error at offset 64870 of 65535 bytes in JobQueueDB.php와 같은 메시지 및 Unsupported operand types와 같은 그 뒤의 오류를 방지하기 위해 redis에서 작업을 설정하는 것을 추천합니다. T157759를 참조하십시오.
Installation
Elastica
비록 아래 지침이 오직 git에서 설치할 때 Composer를 실행하도록 말하지만, 어쨌든 모든 PHP 종속성을 설치하기 위해 실행될 필요가 있습니다.
- 미디어위키 확장 내려받기 지면에서 해당 판을 내려받아서 extension/ 폴더로 이동시킵니다.
- 오직 git에서 설치할 때 Composer를 실행하여 확장 디렉토리에서 composer install --no-dev를 실행하여 PHP 종속성을 설치하십시오. (잠재적인 귀찮은 문제에 대해 작업 T173141을 참조하십시오.)
- 미디어위키 설정 파일 LocalSettings.php에 다음을 추가하십시오:
wfLoadExtension( 'Elastica' );
- Special:Version에 접근해서 확장이 정상적으로 설치가 되었는지 확인하십시오.
CirrusSearch
- 미디어위키 확장 내려받기 지면에서 해당 판을 내려받아서 extension/ 폴더로 이동시킵니다.
- 오직 git에서 설치할 때 Composer를 실행하여 확장 디렉토리에서 composer install --no-dev를 실행하여 PHP 종속성을 설치하십시오. (잠재적인 귀찮은 문제에 대해 작업 T173141을 참조하십시오.)
- 미디어위키 설정 파일 LocalSettings.php에 다음을 추가하십시오:
wfLoadExtension( 'CirrusSearch' );
- 확장 기능과 함께 제공되는 CirrusSearch README, 즉, $IP/extensions/CirrusSearch/README에 있는 설정 지침을 따르십시오. 파일의 모든 내용이 확장의 실행 버전, 특히 지원되는 Elasticsearch의 버전에는 적용되지 않을 수도 있음을 주의하십시오.
- 필요에 따라 구성하십시오.
- Special:Version에 접근해서 확장이 정상적으로 설치가 되었는지 확인하십시오.
Upgrading
CirrusSearch UPGRADE 파일에서 업그레이드 지침을 따르십시오.
Configuration
CirrusSearch의 구성 매개변수는 "settings.txt"에서 문서화되어 있습니다. 역시 CirrusSearch 구성 프로파일에 대한 문서를 참조하십시오.
Initial setup
LocalSettings.php에 $wgDisableSearchUpdate = true;을 추가합니다.
만약 Elasticsearch를 localhost가 아닌 곳에서 실행하고 있으면, $wgCirrusSearchServers = [ 'elasticsearch0', 'elasticsearch1' ];와 같이 서버를 추가하십시오.
그런-다음 스크립트를 실행하여 elasticsearch 인덱스를 생성하십시오:
- cd /var/www/html/w
- php extensions/CirrusSearch/maintenance/UpdateSearchIndexConfig.php
그런-다음 LocalSettings.php에서 $wgDisableSearchUpdate = true;를 제거하십시오.
다음으로 아래 명령을 실행하여 검색 인덱스를 부트스트랩하십시오:
- php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipLinks --indexOnSkip
- php extensions/CirrusSearch/maintenance/ForceSearchIndex.php --skipParse
이를 완료하는 데에는 꽤 시간이 소요됨에 주목하십시오. 과거에는 꽤 시간이 소모되었으나, 데이터가 이전보다 훨씬 증가했음에도 불구하고, 크게 시간 소모적이지 않습니다. 단지, 아래의 대기열을 비우는 과정은 조금 시간 소모적입니다!!
한번 이것이 완료되면 ElasticSearch에 질의를 사용하기 위해 LocalSettings.php에 $wgSearchType = 'CirrusSearch';를 추가하십시오.
만약 작업 대기열을 설정하셨다면, 작업의 진행 정도에 따라 검색이 이루어지게 되므로, 다음 명령을 실행해서 작업 대기열을 비울 수 있습니다. 이때, 정해진 용량 제한에 의해, 연속적으로 계속 명령을 내려서 완전히 빌 때까지 계속하십시오:
- php maintenance/runJobs.php
Completion Suggester
먼저, LocalSettings.php에 다음 설정을 추가하십시오:
$wgCirrusSearchUseCompletionSuggester = 'yes';
$wgCirrusSearchCompletionSettings = 'fuzzy-subphrases';
$wgCirrusSearchPhraseSuggestProfiles = 'default';
$wgCirrusSearchCompletionSuggesterSubphrases = [
'build' => true,
'use' => true,
'type' => 'anywords',
'limit' => 10,
];
$wgCirrusSearchCompletionSuggesterUseDefaultSort = true;
그런-다음 미디어위치 확장에서 다음 파일을 한번 실행하십시오:
- cd /var/www/html/w
- php extensions/CirrusSearch/maintenance/UpdateSuggesterIndex.php
마지막으로 매일 한 번씩 위의 php 파일을 갱신하도록 파일을 하나 만들어줍니다.
- sudo vi /etc/cron.daily/mediawiki-UpdateSuggesterIndex
#!/bin/sh
#
test -x /var/www/html/w/extensions/CirrusSearch/maintenance/UpdateSuggesterIndex.php || exit 0
php /var/www/html/w/extensions/CirrusSearch/maintenance/UpdateSuggesterIndex.php --conf=/var/www/html/w/LocalSettings.php >/dev/null 2>&1
설정이 잘되었는지 여부를 확인하고 싶으면, Special:Preferences#mw-prefsection-searchoptions를 방문하십시오.