웹 검색 엔진은 방대한 양의 온라인 정보를 색인화하여 밀리초 내에 액세스할 수 있도록 하는 데 필수적입니다. 이번 프로젝트에서는 RelaxSearch라는 이름의 Go(Golang) 검색 엔진을 구축했습니다. 강력한 검색 및 분석 엔진인 Elasticsearch와 통합하여 웹 스크래핑, 주기적인 데이터 인덱싱, 검색 기능을 결합합니다. 이 블로그에서는 RelaxSearch의 주요 구성 요소인 아키텍처와 빠른 키워드 기반 검색을 위해 데이터를 효율적으로 스크래핑하고 인덱싱하는 방법을 안내해 드리겠습니다.
RelaxSearch는 두 가지 기본 모듈을 중심으로 구축되었습니다.
검색 엔진 프로젝트를 처음부터 만드는 것은 웹 스크래핑, 데이터 인덱싱 및 효율적인 검색 기술을 이해하는 좋은 방법입니다. Go의 효율성과 Elasticsearch의 강력한 인덱싱 기능을 활용하여 빠른 데이터 검색과 쉬운 확장성을 갖춘 간단하면서도 기능적인 검색 엔진을 만들고 싶었습니다.
RelaxEngine은 웹 페이지를 탐색하고 콘텐츠를 추출하고 저장하는 Go로 작성된 웹 스크레이퍼입니다. 크론 작업으로 실행되므로 정기적인 간격(예: 30분마다)으로 작동하여 최신 웹 데이터로 인덱스를 업데이트할 수 있습니다. 작동 방식은 다음과 같습니다.
RelaxWeb은 RESTful API 엔드포인트를 제공하므로 Elasticsearch에 저장된 데이터를 쉽게 쿼리하고 검색할 수 있습니다. API는 키워드, 페이지 매기기, 날짜 필터링 등 여러 매개변수를 허용하여 관련 콘텐츠를 JSON 형식으로 반환합니다.
다음은 RelaxSearch의 작동 방식을 보여주는 몇 가지 중요한 구성 요소와 코드 발췌입니다.
핵심 기능은 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 엔드포인트는 전체 텍스트 검색 기능을 제공합니다. 엔드포인트 /search는 요청을 수신하고 Elasticsearch에 쿼리하여 키워드를 기반으로 관련 콘텐츠를 반환합니다.
func searchHandler(w http.ResponseWriter, r *http.Request) { keyword := r.URL.Query().Get("keyword") results := queryElasticsearch(keyword) json.NewEncoder(w).Encode(results) }
git clone https://github.com/Ravikisha/RelaxSearch.git cd RelaxSearch
구성
Elasticsearch 자격 증명을 사용하여 RelaxEngine 및 RelaxWeb 모두에 대한 .env 파일을 업데이트하세요.
Docker로 실행
RelaxSearch는 쉬운 설정을 위해 Docker를 사용합니다. 간단히 실행하세요:
docker-compose up --build
RelaxSearch는 기본 검색 엔진에 대한 교육적이고 실용적인 데모입니다. 아직 프로토타입이지만 이 프로젝트는 웹 스크래핑, 전체 텍스트 검색, Go 및 Elasticsearch를 사용한 효율적인 데이터 인덱싱의 기본 사항을 이해하는 데 중요한 역할을 했습니다. 확장 가능한 환경에서 개선과 실제 적용을 위한 길을 열어줍니다.
GitHub 저장소를 탐색하여 RelaxSearch를 직접 사용해 보세요!
위 내용은 Elasticsearch를 사용하여 Go에서 웹 검색 엔진 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!