Elasticsearch를 사용하여 Go에서 웹 검색 엔진 구축

Susan Sarandon
풀어 주다: 2024-11-05 10:33:02
원래의
441명이 탐색했습니다.

웹 검색 엔진은 방대한 양의 온라인 정보를 색인화하여 밀리초 내에 액세스할 수 있도록 하는 데 필수적입니다. 이번 프로젝트에서는 RelaxSearch라는 이름의 Go(Golang) 검색 엔진을 구축했습니다. 강력한 검색 및 분석 엔진인 Elasticsearch와 통합하여 웹 스크래핑, 주기적인 데이터 인덱싱, 검색 기능을 결합합니다. 이 블로그에서는 RelaxSearch의 주요 구성 요소인 아키텍처와 빠른 키워드 기반 검색을 위해 데이터를 효율적으로 스크래핑하고 인덱싱하는 방법을 안내해 드리겠습니다.

RelaxSearch 개요

RelaxSearch는 두 가지 기본 모듈을 중심으로 구축되었습니다.

  1. RelaxEngine: 특정 웹사이트를 주기적으로 크롤링하고, 콘텐츠를 추출하고, Elasticsearch에서 색인을 생성하는 cron 작업을 기반으로 하는 웹 스크래퍼입니다.
  2. RelaxWeb: 사용자가 색인화된 데이터를 검색할 수 있도록 하고 사용자 친화적인 응답을 위해 페이지 매김, 필터링 및 콘텐츠 강조 표시 기능을 제공하는 RESTful API 서버입니다.

프로젝트 동기부여

검색 엔진 프로젝트를 처음부터 만드는 것은 웹 스크래핑, 데이터 인덱싱 및 효율적인 검색 기술을 이해하는 좋은 방법입니다. Go의 효율성과 Elasticsearch의 강력한 인덱싱 기능을 활용하여 빠른 데이터 검색과 쉬운 확장성을 갖춘 간단하면서도 기능적인 검색 엔진을 만들고 싶었습니다.

주요 특징

  • 자동 크롤링: Cron 작업을 사용하면 RelaxEngine이 정기적으로 실행되어 데이터를 스크랩하고 Elasticsearch에 저장할 수 있습니다.
  • 전체 텍스트 검색: RelaxWeb은 전체 텍스트 검색 기능을 제공하여 키워드로 콘텐츠를 색인화하여 검색 속도를 높입니다.
  • REST API: 페이지 매기기, 날짜 필터링 및 콘텐츠 강조 표시를 위한 매개변수가 포함된 RESTful API를 통해 액세스할 수 있습니다.
  • 데이터 저장: 색인화된 콘텐츠는 Elasticsearch에 저장되므로 확장 가능하고 응답성이 뛰어난 쿼리가 가능합니다.

RelaxSearch의 아키텍처

1. RelaxEngine(웹 스크레이퍼 및 인덱서)

RelaxEngine은 웹 페이지를 탐색하고 콘텐츠를 추출하고 저장하는 Go로 작성된 웹 스크레이퍼입니다. 크론 작업으로 실행되므로 정기적인 간격(예: 30분마다)으로 작동하여 최신 웹 데이터로 인덱스를 업데이트할 수 있습니다. 작동 방식은 다음과 같습니다.

  • 시드 URL: RelaxEngine은 지정된 시드 URL에서 스크래핑을 시작한 다음 구성 가능한 깊이까지 사이트 내의 링크를 따라갑니다.
  • 콘텐츠 파싱: 각 페이지에 대해 제목, 설명, 키워드를 추출하여 정보 데이터 세트를 구성합니다.
  • Elasticsearch에서 인덱싱: 스크랩된 콘텐츠는 Elasticsearch에서 인덱싱되어 전체 텍스트 검색이 가능합니다. 각 페이지의 데이터는 고유 식별자, 제목, 설명 및 기타 메타데이터와 함께 저장됩니다.

2. RelaxWeb (검색 API)

RelaxWeb은 RESTful API 엔드포인트를 제공하므로 Elasticsearch에 저장된 데이터를 쉽게 쿼리하고 검색할 수 있습니다. API는 키워드, 페이지 매기기, 날짜 필터링 등 여러 매개변수를 허용하여 관련 콘텐츠를 JSON 형식으로 반환합니다.

  • API 엔드포인트: /search
  • 쿼리 매개변수:
    • 키워드: 주요 검색어입니다.
    • from 및 size: 페이지 매김 제어
    • dateRangeStart 및 dateRangeEnd: 데이터의 타임스탬프를 기준으로 결과를 필터링합니다.

Building a Web Search Engine in Go with Elasticsearch

주요 구성 요소 및 코드 조각

다음은 RelaxSearch의 작동 방식을 보여주는 몇 가지 중요한 구성 요소와 코드 발췌입니다.

RelaxEngine의 기본 Go 코드

핵심 기능은 main.go 파일에 있습니다. 여기서 RelaxEngine은 gocron을 사용하여 스케줄러를 초기화하여 cron 작업을 관리하고 Elasticsearch 클라이언트를 설정하며 시드 URL에서 크롤링을 시작합니다.

func main() {
    cfg := config.LoadConfig()
    esClient := crawler.NewElasticsearchClient(cfg.ElasticsearchURL)
    c := crawler.NewCrawler(cfg.DepthLimit, 5)
    seedURL := "https://example.com/" // Replace with starting URL

    s := gocron.NewScheduler(time.UTC)
    s.Every(30).Minutes().Do(func() {
        go c.StartCrawling(seedURL, 0, esClient)
    })
    s.StartBlocking()
}
로그인 후 복사

크롤러 및 색인 생성 논리

crawler.go 파일은 웹페이지 요청을 처리하고, 콘텐츠를 추출하고, 색인을 생성합니다. Elastic 패키지를 사용하면 스크랩된 각 페이지가 Elasticsearch에 저장됩니다.

func (c *Crawler) StartCrawling(pageURL string, depth int, esClient *elastic.Client) {
    if depth > c.DepthLimit || c.isVisited(pageURL) {
        return
    }
    c.markVisited(pageURL)
    links, title, content, description, err := c.fetchAndParsePage(pageURL)
    if err == nil {
        pageData := PageData{URL: pageURL, Title: title, Content: content, Description: description}
        IndexPageData(esClient, pageData)
    }
    for _, link := range links {
        c.StartCrawling(link, depth+1, esClient)
    }
}
로그인 후 복사

RelaxWeb에서 API 코드 검색

relaxweb 서비스에서 API 엔드포인트는 전체 텍스트 검색 기능을 제공합니다. 엔드포인트 /search는 요청을 수신하고 Elasticsearch에 쿼리하여 키워드를 기반으로 관련 콘텐츠를 반환합니다.

func searchHandler(w http.ResponseWriter, r *http.Request) {
    keyword := r.URL.Query().Get("keyword")
    results := queryElasticsearch(keyword)
    json.NewEncoder(w).Encode(results)
}
로그인 후 복사

RelaxSearch 설정

  1. 저장소 복제
   git clone https://github.com/Ravikisha/RelaxSearch.git
   cd RelaxSearch
로그인 후 복사
  1. 구성

    Elasticsearch 자격 증명을 사용하여 RelaxEngine 및 RelaxWeb 모두에 대한 .env 파일을 업데이트하세요.

  2. Docker로 실행

    RelaxSearch는 쉬운 설정을 위해 Docker를 사용합니다. 간단히 실행하세요:

   docker-compose up --build
로그인 후 복사

Building a Web Search Engine in Go with Elasticsearch

Building a Web Search Engine in Go with Elasticsearch

Building a Web Search Engine in Go with Elasticsearch

과제와 개선 사항

  • 확장성: Elasticsearch는 확장성이 뛰어나지만 수많은 링크가 포함된 광범위한 스크래핑을 처리하려면 대규모 배포를 위한 최적화가 필요합니다.
  • 강력한 오류 처리: 오류 처리 및 재시도 메커니즘을 강화하면 복원력이 향상됩니다.

결론

RelaxSearch는 기본 검색 엔진에 대한 교육적이고 실용적인 데모입니다. 아직 프로토타입이지만 이 프로젝트는 웹 스크래핑, 전체 텍스트 검색, Go 및 Elasticsearch를 사용한 효율적인 데이터 인덱싱의 기본 사항을 이해하는 데 중요한 역할을 했습니다. 확장 가능한 환경에서 개선과 실제 적용을 위한 길을 열어줍니다.

GitHub 저장소를 탐색하여 RelaxSearch를 직접 사용해 보세요!

위 내용은 Elasticsearch를 사용하여 Go에서 웹 검색 엔진 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!