웹 검색 엔진은 방대한 양의 온라인 정보를 색인화하여 밀리초 내에 액세스할 수 있도록 하는 데 필수적입니다. 이번 프로젝트에서는 RelaxSearch라는 이름의 Go(Golang) 검색 엔진을 구축했습니다. 강력한 검색 및 분석 엔진인 Elasticsearch와 통합하여 웹 스크래핑, 주기적인 데이터 인덱싱, 검색 기능을 결합합니다. 이 블로그에서는 RelaxSearch의 주요 구성 요소인 아키텍처와 빠른 키워드 기반 검색을 위해 데이터를 효율적으로 스크래핑하고 인덱싱하는 방법을 안내해 드리겠습니다.
RelaxSearch 개요
RelaxSearch는 두 가지 기본 모듈을 중심으로 구축되었습니다.
- RelaxEngine: 특정 웹사이트를 주기적으로 크롤링하고, 콘텐츠를 추출하고, Elasticsearch에서 색인을 생성하는 cron 작업을 기반으로 하는 웹 스크래퍼입니다.
- 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: 데이터의 타임스탬프를 기준으로 결과를 필터링합니다.
주요 구성 요소 및 코드 조각
다음은 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 설정
- 저장소 복제
git clone https://github.com/Ravikisha/RelaxSearch.git cd RelaxSearch
구성
Elasticsearch 자격 증명을 사용하여 RelaxEngine 및 RelaxWeb 모두에 대한 .env 파일을 업데이트하세요.Docker로 실행
RelaxSearch는 쉬운 설정을 위해 Docker를 사용합니다. 간단히 실행하세요:
docker-compose up --build
과제와 개선 사항
- 확장성: Elasticsearch는 확장성이 뛰어나지만 수많은 링크가 포함된 광범위한 스크래핑을 처리하려면 대규모 배포를 위한 최적화가 필요합니다.
- 강력한 오류 처리: 오류 처리 및 재시도 메커니즘을 강화하면 복원력이 향상됩니다.
결론
RelaxSearch는 기본 검색 엔진에 대한 교육적이고 실용적인 데모입니다. 아직 프로토타입이지만 이 프로젝트는 웹 스크래핑, 전체 텍스트 검색, Go 및 Elasticsearch를 사용한 효율적인 데이터 인덱싱의 기본 사항을 이해하는 데 중요한 역할을 했습니다. 확장 가능한 환경에서 개선과 실제 적용을 위한 길을 열어줍니다.
GitHub 저장소를 탐색하여 RelaxSearch를 직접 사용해 보세요!
위 내용은 Elasticsearch를 사용하여 Go에서 웹 검색 엔진 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

GO 언어로 문자열 패키지를 마스터하면 텍스트 처리 기능과 개발 효율성이 향상 될 수 있습니다. 1) 함유 기능을 사용하여 하위 문자열을 확인하십시오. 2) 인덱스 기능을 사용하여 하위 문자열 위치를 찾으십시오. 빈 문자열을 확인하지 않고 큰 문자열 작동 성능 문제와 같은 일반적인 오류를 피하기 위해주의하십시오.

문자열 조작을 단순화하고 코드를보다 명확하고 효율적으로 만들 수 있기 때문에 이동중인 문자열 패키지에주의해야합니다. 1) strings.join을 사용하여 줄을 효율적으로 스플 라이스; 2) strings.fields를 사용하여 빈 문자로 문자열을 나눕니다. 3) 문자열을 통해 기판 위치를 찾으십시오. 4) 문자열을 대체하려면 strings.replaceall을 사용하십시오. 5) 현악기를 효율적으로 스플 라이스로 사용하여 strings.builder를 사용하십시오. 6) 예상치 못한 결과를 피하기 위해 항상 입력을 확인하십시오.

thestringspackageoisessentialponderfficientstringmanipulation.1) itofferssimpleyetpowerfultionsfortaskslikecheckingsubstringsandjoiningstrings.2) ithandlesunicodewell, withFunctionsLikestrings.fieldsforwhitespace-separatedValues.3) forperformance, st

whendecidingbetweengo'sbytespackageandstringspackage, usebytes.bufferforbinarydataandstrings.builderfortringoperations.1) audeBytes.bufferforworkingwhithbyteslices, binarydata, 첨부 DifferentDatatypes, andwritingtoio.2) useastrons

GO의 문자열 패키지는 다양한 문자열 조작 기능을 제공합니다. 1) 문자열을 사용하여 기판을 확인하십시오. 2) strings.split을 사용하여 문자열을 서브 스트링 슬라이스로 분할하십시오. 3) 문자열을 통해 문자열을 병합합니다. 4) 문자열의 시작과 끝에서 strings.trimspace 또는 strings.trim을 사용하여 공백 또는 지정된 문자를 제거하십시오. 5) 지정된 모든 하위 문구를 문자열로 교체하십시오. 6) strings.hasprefix 또는 strings.hassuffix를 사용하여 문자열의 접두사 또는 접미사를 확인하십시오.

Go Language Strings 패키지를 사용하면 코드 품질이 향상 될 수 있습니다. 1) strings.join ()을 사용하여 성능 오버 헤드를 피하기 위해 문자열 배열을 우아하게 연결하십시오. 2) strings.split () 및 strings.contains ()를 결합하여 텍스트를 처리하고 사례 민감도 문제에주의를 기울입니다. 3) 문자열의 남용을 피하고 ()을 replace ()하고 많은 수의 대체에 정규 표현식을 사용하는 것을 고려하십시오. 4) strings.builder를 사용하여 자주 스 플라이 싱 스트링의 성능을 향상시킵니다.

GO의 바이트 패키지는 바이트 슬라이싱을 처리하기위한 다양한 실용적인 기능을 제공합니다. 1. BYTES는 바이트 슬라이스에 특정 시퀀스가 포함되어 있는지 확인하는 데 사용됩니다. 2.Bytes.split은 바이트 슬라이스를 작은 피스로 분할하는 데 사용됩니다. 3.Bytes.join은 여러 바이트 슬라이스를 하나로 연결하는 데 사용됩니다. 4.bytes.trimspace는 바이트 슬라이스의 전면 및 후면 블랭크를 제거하는 데 사용됩니다. 5.Bytes.equal은 두 바이트 슬라이스가 동일인지 비교하는 데 사용됩니다. 6.bytes.index는 LargersLices에서 하위 슬라이스의 시작 지수를 찾는 데 사용됩니다.

Theencoding/BinaryPackageInsentialBecauseItProvideAstandAdizedWayStandwriteBinaryData, Cross-PlatformCompatibility 및 HandshandlingDifferentendianness.ItoffersFunctionsLikeRead, Write, andwriteUvarIntForPrecisControloverbinary


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)