PHP 로컬 검색 엔진 Orca Search

울티마 가이드 홈페이지를 만들면서 꼭 필요하다고 생각했던(하지만 사용률은 미미한^^;) 기능이 로컬 검색 기능이었습니다. PHP 기반의 게시판이나 블로그가 아닌 html 페이지로 만들어졌기에 검색 기능을 넣기 위해서 열심히 자료를 찾아다녔지요.

물론 국내에 잘 알려진 na@search 스크립트가 있지만 2002년 12월 이후로 업데이트가 안되고 있고 유니코드 지원 여부도 확인할 수 없더군요.

로컬 검색 엔진에 관한 자료가 생각보다 적은데다가, 검색 엔진으로 ‘검색 엔진’을 찾으려니 엉뚱한 결과들만 나왔는데 그러다 찾은 것이 지금 소개하는 Orca Search입니다.

주요 기능 소개

일단 Orca Search 홈페이지에 나와 있는 주요 기능은 다음과 같습니다.

  • 쉬운 설치와 실행(PHP와 MySQL 데이타베이스를 사용함).
  • 1000~2000 페이지까지 무리 없이 사용할 수 있음.
  • 키워드 인덱싱이 아닌 전체 텍스트(full-text) 인덱싱으로 신뢰성 있는 검색 결과를 얻을 수 있음.
  • 자동으로 사이트를 인덱싱해서 데이타베이스를 업데이트함.
  • 향상된 검색 알고리즘 사용 – 어구(語句) 검색이 가능하며, 검색어에 가중치를 부여할 수 있음. 파일 타입에 따른 검색이 가능함.
  • 일반적인 텍스트 외에 페이지 제목(title), 키워드, 주소(URI) 검색이 가능함.
  • 완벽한 유니코드(UTF-8) 지원.
  • 추가적으로 라틴어 악센트 매칭이 가능함(예: ‘a’‘ä’ 또는 ‘â’ 매칭 가능).
  • PDF나 JPEG 문서 내의 텍스트를 인식할 수 있는 플러그인 포함.
  • 사용자의 검색어를 로그로 남김.
  • 검색 페이지 캐싱(cashing)으로 서버 부하를 줄일 수 있음.
  • 편리한 컨트롤 패널 GUI 지원.
  • 다양한 출력 방식 지원 – (X)HTML, RSS 2.0.
  • 인덱싱한 데이타베이스로 구글 사이트맵을 생성할 수 있음.
  • 데이타베이스를 압축된 자바스크립트로 변환시켜 오프라인 미러 사이트에서 사용할 수 있도록 해주는 툴(JWriter) 포함.

기능이 다양하지요? 추가적으로 제가 사용해보면서 좋다고 생각했던 기능을 적어보겠습니다.

  • 쉬운 커스터마이징 – 출력 결과를 쉽게 바꿀 수 있음.
  • ‘의미 있는’ 마크업 – CSS로 ‘표현’ 속성이 분리되어 있고 약간의 수정(?)으로 XHTML 1.0 Strict DTD에 맞는 검색 결과 출력 가능.
  • 상세한 도움말 – 48KB에 달하는 영문 도움말 텍스트 파일(readme.txt) 포함.
  • 특정한 태그에 가중치를 부여할 수 있으므로 검색의 정확성이 높음.
  • 특정한 태그나 id, class가 적용된 태그 내의 텍스트를 제외하고 인덱싱할 수 있음.
  • 저작권 관련 문구를 반드시 표시할 필요가 없으며 GPL를 따름.

블로그에 적용된 Orca Search 데모

열 마디 설명보다 직접 사용해보면 기능을 쉽게 파악하실 수 있을겁니다. 아래 입력란에 적당한 검색어를 넣어보세요. 최근에 Orca Search가 2.2 베타 버전에서 2.3 버전으로 업데이트돼서 테스트용으로 블로그에 적용해 봤습니다.

† 2010년 6월 17일: 블로그에서는 더 이상 Orca Search 데모를 제공하지 않습니다. 테스트가 필요하신 분은 울티마 가이드 홈페이지 상단의 검색창을 이용해주시기 바랍니다. ^^;

어떤 사이트에 유용한가?

일단 이 검색 스크립트는 동적으로 페이지가 생성되는 블로그에는 적합하지 않습니다. 말 그대로 ‘검색 엔진’이기 때문에 페이지가 만들어졌다 해도 인덱싱을 하지 않으면 검색 결과에 반영되지 않지요. 이미 저장된 데이타베이스를 검색하는 것이 아니라 이미 만들어진 페이지의 내용을 자체적인 데이타베이스 테이블에 보관한 다음 필요할 때 불러오는 방식으로 동작하기 때문입니다.

하지만 정적으로 만들어지는 html 기반의 홈페이지에 검색 기능을 추가하는 용도로는 더할 나위 없이 좋습니다. 울티마 가이드 홈페이지 처럼이요(끊임 없는 광고^^;). ‘로컬 검색 엔진’에 관한 정보를 찾는 분들은 아마도 이런 목적으로 이 페이지를 찾아오시지 않았을까 생각합니다.

설치 방법

Orca Search 설치에 필요한 조건은 다음과 같습니다.

PHP 4.2.0 버전 이상 (4.3.0 이상을 추천함)
MySQL 3.23 버전 이상

다운로드 페이지에서 최종 버전(2007년 5월 29일 현재 2.3 버전)을 다운받은 후 압축을 해제합니다.

os2 폴더에 있는 config.ini.php 파일을 열고 자신이 사용하는 데이타베이스 설정에 맞게 hostname, username, password, database 값을 바꿔줍니다. 보안과 관련된 중요한 정보이니 다른 사람에게는 절대로 알려주면 안된다는 점 주의하시고요.

마찬가지로 config.ini.php 파일에 있는 adminNameadminPass를 설정해 줍니다. 여기에 적힌 이름과 비밀번호로 컨트롤 패널에 접속하게 되지요.

설정이 끝났으면 모든 파일과 폴더를 FTP 프로그램을 사용해서 서버에 업로드합니다. 전송이 끝난 후 웹 브라우저에서 os2/control.php 파일의 주소를 입력한 다음 위에서 설정한 이름과 비밀번호로 로그인합니다. 저는 모든 파일과 폴더를 사이트 루트 디렉토리에 업로드했기 때문에 아래 주소로 접속했습니다.

http://blog.wystan.net/os2/control.php

기본 검색 엔진 설정

컨트롤 패널에서 Orca Search의 다양한 옵션을 설정할 수 있습니다. 기본적으로 맨 처음 해줘야 할 것은 유니코드(UTF-8) 인코딩 설정입니다. ‘Tool’ 메뉴의 ‘Display Charset’ 설정에서 컨트롤 패널에서 사용하는 문자 인코딩 방식을 지정할 수 있는데 UTF-8 인코딩으로 작성된 페이지에 대한 인덱싱 결과를 보려면 UTF-8로 설정해주세요. 다음으로 검색 엔진이 실제로 UTF-8 인코딩으로 페이지를 인덱싱할 수 있도록 ‘Spider’ 메뉴의 ‘UTF-8 Indexing’ 항목을 체크 표시해주면 UTF-8로 인코딩된 한글을 완벽하게 처리할 수 있습니다.

‘Spider’ 메뉴의 ‘Use Crontab Trigger’를 활성화시키면 유닉스의 crontab 명령을 이용해서 주기적으로 페이지를 인덱싱할 수 있다고 하는데 사용해보지는 않았습니다. 이 명령을 사용하지 않고 일정한 시간 간격마다 Orca Search 스크립트를 실행하려면 간단하게 오른쪽의 ‘Interval Between Spiders’ 옵션을 활성화시키고 시간 간격을 적어주면 됩니다. 기본값인 24시간을 적용하면 하루에 한 번 자동으로 전체 페이지를 인덱싱합니다.

물론 사용자가 원할 때에만 인덱싱을 할 수 있습니다. ‘Spider’ 메뉴 맨 위에 있는 ‘Start Spider’ 버튼을 클릭하면 즉시 인덱싱이 시작됩니다.

검색 페이지 만들기

Orca Search를 설치하면 기본 검색 페이지인 _search.php 파일이 만들어집니다. 하지만 대부분의 경우 검색 창을 이미 만들어진 페이지에 적용하게 되는데 그럴 때에는 다음과 같은 PHP 코드를 사용하면 됩니다.

<?php 
include "os2/config.php";
include "os2/head.php";
include "os2/body.xhtml.php";
?>

마치며

조금 더 자세히 설명하려고 했는데 밤은 깊어가고 글은 길어졌네요^^; 자세한 사항은 Orca Search에 포함된 도움말을 참고하시기 바랍니다. 사실 Orca Search의 다양한 기능을 잘 살려서 정확성 있는 검색 결과를 보여주려면 컨트롤 패널의 옵션들을 세밀하게 설정해야 합니다. 또한 자신이 원하는 출력 양식을 만들기 위해서는 CSS를 사용할 수 있어야 하고요.

하지만 앞서 이 스크립트가 html 기반의 정적인 사이트에 적합하다고 했던 것처럼 블로그가 아닌 상업적인 사이트를 구축하거나 할 때에는 유용하게 사용할 수 있으리라는 생각에 소개하는 글을 써봤습니다. 혹시라도 궁금한 점 있으면 댓글이나 이메일로 알려주세요.

댓글 12개가 달렸습니다. 태그:

  1. 지인우인 | 2007-05-30 08:44

    오~이거 좋은데요. 나중에 한번 사용해 봐야겠습니다. 정말 유용한 정보내요. ^_^

  2. wystan | 2007-05-30 10:40

    처음 설치하고서 무지 뿌듯했답니다. ^^ 기대 이상으로 좋았거든요.

  3. 사이버청계천 | 2008-08-14 21:27

    메뉴얼 대로 해봤는데 이상하게도 에러가 나오네요ㅠㅠ
    원인이 무엇인지 조언을 부탁드려봅니다.

    제 홈피에 깔면 무척좋을것 같은데 쩝,,
    http://ccsk.co.kr/os2/control.php 다음과 같이 해보니 이상하게 나오네요ㅠㅠ

  4. wystan | 2008-08-15 22:59

    서버가 HTTP 요청에 대한 응답을 보낼 때 header가 반드시 content보다 먼저 전송되어야 합니다.

    만약 content가 전송된 다음에 header 전송을 시도하면 링크하신 페이지처럼
    “Cannot modify header information – headers already sent by …” 경고가 출력됩니다.

    경고 메시지를 보니 config.php 파일 932번째 줄에서 header가 전송되어야 하는데 그보다 먼저 config.ini.php 파일 29번째 줄에서 전송되었다고 하네요.

    PHP는 <?php ... ?> 밖에 있는 문자나 공백, 줄 바꿈 등을 모두 content로 인식해서 출력하고, 처음 출력이 시작될 때 자동으로 기본 header를 보냅니다.

    결론적으로 config.ini.php 파일 29번째 줄에 어떤 출력이 있어서 header가 보내진 것 같으니 한 번 확인해보시기 바랍니다.

  5. 사이버청계천 | 2008-08-25 16:45

    안녕하세요^^
    보내주신 댓글을 읽어보고 또 읽어보고 혼자서 끙끙대고 해보고 안되서 폴더 지우고 다시 다운받아서 해보고 했는데…ㅠㅠ html 만 조금 알고 중년의 나이에 혼자서 독학으로 홈피를 만들다보니 프로그램쪽으론 무지해서 혼자서는 도저히 진행이 안되는군요.. 죄송하지만 좀더 상세하게 초보자에게 알려준다고 생각하시고 다시 한번 상세한 답변을 받아보면 안될까요? 정말 이 로컬검색엔진을 달고 싶은데;;

    참고로 제가 작업(?) 한 내용을 기술하자면,,
    1.프로그램을 다운을 받아 압축해제를 하였더니 orcasearch_2.3 폴더가 생기고 그폴더를 여니 os2폴더와 _search.html 과 _search.php 가 생겼습니다.

    2.나모5 에서 os2 폴더속 config.ini.php 파일을 열고 제가 사용하는 데이타베이스 설정에 맞게 hostname, username, password, database 값을 바꿔주고 config.ini.php 파일에 있는 adminName과 adminPass를 설 정해 주었습 니다.

    3.나모5 에서 db설정값을 모두 마치고 저장을 한후 FTP 프로그램을 사용해서 orcasearch_2.3 폴더를 전부 올리지 않고 orcasearch_2.3 폴더를 열어서 os2 폴더와 _search.html 과 _search.php 를 서버에 업로드하였습니다.(님의 블러그 검색엔진 주소를 보니 orcasearch_2.3 폴더없이 막바로 os2폴더로 시작을 해서 저도 os2폴더 부터 올렸습니다-자연히 서버에는 os2폴더와 그밑에 _search.html 과 _search.php 이 따로 따로 다른 폴더들과 같이 존재합니다)

    4.전송이 끝난 후 웹 브라우저에서 www.ccsk.co.kr/os2/control.php 파일의 주소를 입력한 다음 위에서 설정한 이름과 비밀번호로 로그인하였는데 상담했던대로 계속 에러가 나네요ㅜㅜ 근데 중요한것은 님이 말씀해주신 댓글을 수십번 읽고 에러가 나는곳을 찾아볼려고 해도 안되네요ㅠㅠ 제가 진행한것중 어느곳에 잘못된것이 있는지 다시 자문좀 부탁드려봅니다.

    귀찮다도 생각하시지 말고 시간을 조금 내어서 초보자 수준의 설명좀 부탁드려볼께요^^
    만약 자세한 설명을 달아주시면 많은분들이 애용하지싶네요.. 저처럼..
    그럼 수고하세요.. 감사합니다.

  6. wystan | 2008-08-26 10:28

    안녕하세요~ ^^

    진행상에 특별한 문제가 있는 것 같지는 않지만 그래도 혹시 모르니 config.ini.php 파일을 다시 한 번 확인해보세요.

    우선 <?php ... ?> 밖에 어떤 공백이나 줄 바꿈도 있어서는 안 됩니다. 또 php 블록 안에서 echo() 등으로 출력을 해서도 안 되고요.

    <?php가 1행에 있고, ?>가 27행에 있는데 경고 메시지에 따르면 29행에 무엇인가 있을 가능성이 높습니다. 그러니 특히 줄 바꿈이 있는 건 아닌지 확인해보세요.

    그리고 www.ccsk.co.kr/os2/control.php 소스를 보니 <p>&nbsp;</p> 코드가 있는데 혹시 직접 넣으셨다면 제거하셔야 합니다.

    여기까지 아무 문제가 없다면 파일 형식이나 인코딩 차이로 발생하는 문제일 수도 있는데 이 부분에 대해서는 간단히 설명드리기가 어렵네요.

  7. 사이버청계천 | 2008-08-26 11:49

    안녕하세요*^^*
    감사합니다. 우선 달아주신 댓글대로 열심히 해보겠습니다.

    그럼 좋은 하루 보내세요^^

  8. blue | 2008-09-23 23:47

    안녕하세요. 님 덕분에 서치엔진을 잘 설치했습니다. 다만 메뉴내의 Maximum Matched Text Displayed 값이 수정이 안됩니다. 수정이 안된다기보다는 수정을 해도 먹히지가 않네요. 기본값은 디스플레이되는 양이 너무 적어 한 1000정도로 수정해봐도 그대로입니다. 한 50정도로 적게 하면 적어지기는 해요. 사용환경은 UTF-8환경이구요. 이거 버그일까요?

  9. wystan | 2008-09-24 23:41

    안녕하세요~ blue님.
    말씀하신 부분은 버그가 맞는 것 같습니다. 전에 저도 같은 문제로 스크립트 소스를 살펴봤었거든요.

    os2 디렉토리에 있는 head.php 파일 128번째 라인에 다음과 같은 코드가 있습니다.
    $matchtext = substr(" ".$value['body']." ", max(0, $firstpos - 50), 140 + strlen($term));

    여기에서 숫자 140을 적당히 조절해서 테스트해보시기 바랍니다. 저는 125번째 라인도 동일하게 수정했는데 언듯 보기에 수정 안 해도 상관 없을 것 같습니다.

    일단 검색이 되면 동일한 키워드에 대해서는 캐시 때문에 새로 고침을 해도 수정 사항이 반영되지 않으니 검색어를 바꿔서 확인하셔야 합니다.

    계속 문제가 있으면 다시 댓글 남겨주세요~

  10. sakulaki | 2009-01-21 18:29

    안녕하세요.wystan 님 ^^
    한동안 검색 때문에 많이 헤메고 삽질도 했으나, 제공해주신 자료로 쉽게 설치하고
    검색까지는 완료 하였습니다..
    혹시.. 검샥 결과 나온 부분이 처음에 있던 소스 부분과 다른데요.. 어떤 부분을 수정하셨는지
    궁금해서 글 남깁니다..^^ 혹시 가르쳐 주실순 없는지요?

    혹시 가능하다다면 하나더..^^ 중간에 있는 예제의 검색을 눌렀을때 실행할수 있는 기본 코드좀 알려주실순 없나요?

  11. lvShot | 2009-10-13 17:59

    안녕하세요 덕분에 서치엔진에 대해 많은 공부가 되었습니다.

    한번 테스트를 할려구 사이트에 적용을 시켜보았습니다만

    에러가 발생하네요. 왜 에러가 생기는지 여러가지 테스트를 해봤지만

    원인을 알 수가 없어서 답답해서 질문을 ㅡㅜ

    Tools -> Display Charset -> UTF-8
    Submit
    Spider -> UTF-8 Indexing체크
    Spider -> Starting URIs -> http://localhost/kr/index.php -> http://localhost/en/index.php
    Submit
    이렇게 셋팅을 하고 Full scan체크한 뒤 Go 버튼을 눌렀습니다.

    체크 도중 아파치 서버 동작중지에러가 나와버리구요.
    프로그램 종료 버튼을 클릭하면
    “Spider must be initialized either automatically or through the form on the control panel.”
    라는 빨간색 글자의 에러를 표시해주네요.

    뭐가 잘못 된걸까요..조언 좀 부탁드립니다.
    참고로 mysql도 같은 서버에 설치되어있답니다.

  12. 박성진 | 2012-02-28 14:46

    orca seartch 설치후 control 에 진입후에
    스파이더를 누르면 에러 메세지는 없는데
    홈페이지내에 html 문서가 스캔이 안되고
    완료 되었다는 메세지만 나옵니다검색엔진은
    내부 소스 하나도 안건드리고 config.ini만 수정
    했습니다

댓글이 닫혔습니다.