cari
Rumahpembangunan bahagian belakangGolangMembina Enjin Carian Web dalam Go dengan Elasticsearch

Enjin carian web adalah penting untuk mengindeks sejumlah besar maklumat dalam talian, menjadikannya boleh diakses dalam milisaat. Dalam projek ini, saya membina enjin carian dalam Go (Golang) bernama RelaxSearch. Ia menggabungkan pengikisan web, pengindeksan data berkala dan kefungsian carian dengan menyepadukan dengan Elasticsearch—enjin carian dan analitik yang berkuasa. Dalam blog ini, saya akan membimbing anda melalui komponen utama RelaxSearch, seni bina dan cara ia mengikis dan mengindeks data dengan cekap untuk carian berasaskan kata kunci yang pantas.

Gambaran Keseluruhan RelaxSearch

RelaxSearch dibina berdasarkan dua modul utama:

  1. RelaxEngine: Pengikis web yang dikuasakan oleh tugas cron, yang secara berkala merangkak tapak web tertentu, mengekstrak kandungan dan mengindeksnya dalam Elasticsearch.
  2. RelaxWeb: Pelayan API RESTful yang membolehkan pengguna mencari data yang diindeks, menyediakan penomboran, penapisan dan penyerlahan kandungan untuk respons mesra pengguna.

Motivasi Projek

Mencipta projek enjin carian dari awal ialah cara terbaik untuk memahami pengikisan web, pengindeksan data dan teknik carian yang cekap. Saya ingin mencipta enjin carian yang ringkas tetapi berfungsi dengan pengambilan data yang cepat dan kebolehlanjutan yang mudah, menggunakan kecekapan Go dan pengindeksan berkuasa Elasticsearch.

Ciri-ciri Utama

  • Merangkak Automatik: Menggunakan kerja cron, RelaxEngine boleh berjalan pada selang masa yang tetap, mengikis data dan menyimpannya dalam Elasticsearch.
  • Carian Teks Penuh: RelaxWeb menyediakan keupayaan carian teks penuh, mengindeks kandungan mengikut kata kunci, menjadikan carian pantas.
  • REST API: Boleh diakses melalui RESTful API dengan parameter untuk penomboran, penapisan tarikh dan penyerlahan kandungan.
  • Storan Data: Kandungan diindeks disimpan dalam Elasticsearch, membenarkan pertanyaan berskala dan sangat responsif.

Senibina RelaxSearch

1. RelaxEngine (Pengikis Web dan Pengindeks)

RelaxEngine ialah pengikis web yang ditulis dalam Go yang menavigasi halaman web, mengekstrak dan menyimpan kandungan. Ia berjalan sebagai tugas cron, jadi ia boleh beroperasi pada selang masa yang tetap (mis., setiap 30 minit) untuk memastikan indeks dikemas kini dengan data web terkini. Begini cara ia berfungsi:

  • URL Benih: RelaxEngine mula mengikis dari URL benih yang ditentukan dan kemudian mengikuti pautan dalam tapak sehingga kedalaman yang boleh dikonfigurasikan.
  • Penghuraian Kandungan: Untuk setiap halaman, ia mengeluarkan tajuk, penerangan dan kata kunci, membina set data bermaklumat.
  • Pengindeksan dalam Elasticsearch: Kandungan yang dikikis diindeks dalam Elasticsearch, sedia untuk carian teks penuh. Data setiap halaman disimpan dengan pengecam unik, tajuk, perihalan dan metadata lain.

2. RelaxWeb (API Carian)

RelaxWeb menyediakan titik akhir API RESTful, menjadikannya mudah untuk membuat pertanyaan dan mendapatkan semula data yang disimpan dalam Elasticsearch. API menerima beberapa parameter, seperti kata kunci, penomboran dan penapisan tarikh, mengembalikan kandungan yang berkaitan dalam format JSON.

  • Titik Akhir API: /search
  • Parameter Pertanyaan:
    • kata kunci: Istilah carian utama.
    • daripada dan saiz: Kawalan penomboran.
    • dateRangeStart dan dateRangeEnd: Tapis hasil berdasarkan cap masa data.

Building a Web Search Engine in Go with Elasticsearch

Komponen Utama dan Coretan Kod

Di bawah ialah beberapa komponen penting dan petikan kod daripada RelaxSearch untuk menggambarkan cara ia berfungsi.

Kod Main Go untuk RelaxEngine

Fungsi teras adalah dalam fail main.go, di mana RelaxEngine memulakan penjadual menggunakan gocron untuk mengurus kerja cron, menyediakan klien Elasticsearch dan mula merangkak dari URL benih.

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 dan Logik Pengindeksan

Fail crawler.go mengendalikan permintaan halaman web, mengekstrak kandungan dan mengindeksnya. Menggunakan pakej elastik, setiap halaman yang dikikis disimpan dalam 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)
    }
}

Cari Kod API dalam RelaxWeb

Dalam perkhidmatan relaxweb, titik akhir API menyediakan keupayaan carian teks penuh. Titik akhir /carian menerima permintaan dan pertanyaan Elasticsearch, mengembalikan kandungan yang berkaitan berdasarkan kata kunci.

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

Menyediakan RelaxSearch

  1. Klon Repositori
   git clone https://github.com/Ravikisha/RelaxSearch.git
   cd RelaxSearch
  1. Tatarajah

    Kemas kini fail .env untuk kedua-dua RelaxEngine dan RelaxWeb dengan kelayakan Elasticsearch.

  2. Jalankan dengan Docker

    RelaxSearch menggunakan Docker untuk persediaan mudah. Jalankan sahaja:

   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

Cabaran dan Penambahbaikan

  • Skalabiliti: Elasticsearch berskala dengan baik, tetapi mengendalikan pengikisan yang meluas dengan banyak pautan memerlukan pengoptimuman untuk penggunaan berskala lebih besar.
  • Pengendalian Ralat Teguh: Meningkatkan pengendalian ralat dan mekanisme cuba semula akan meningkatkan daya tahan.

Kesimpulan

RelaxSearch ialah demonstrasi pendidikan dan praktikal enjin carian asas. Walaupun ia masih merupakan prototaip, projek ini memainkan peranan penting dalam memahami asas pengikisan web, carian teks penuh dan pengindeksan data yang cekap dengan Go dan Elasticsearch. Ia membuka ruang untuk penambahbaikan dan aplikasi dunia nyata dalam persekitaran boleh skala.

Terokai repositori GitHub untuk mencuba RelaxSearch untuk diri sendiri!

Atas ialah kandungan terperinci Membina Enjin Carian Web dalam Go dengan Elasticsearch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Golang vs Python: Kebaikan dan KekejanganGolang vs Python: Kebaikan dan KekejanganApr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,

Golang dan C: Konvensyen vs kelajuan mentahGolang dan C: Konvensyen vs kelajuan mentahApr 21, 2025 am 12:16 AM

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Mengapa menggunakan Golang? Faedah dan kelebihan dijelaskanMengapa menggunakan Golang? Faedah dan kelebihan dijelaskanApr 21, 2025 am 12:15 AM

Sebab -sebab memilih Golang termasuk: 1) prestasi konkurensi tinggi, 2) sistem jenis statik, 3) mekanisme pengumpulan sampah, 4) perpustakaan dan ekosistem standard yang kaya, yang menjadikannya pilihan yang ideal untuk membangunkan perisian yang cekap dan boleh dipercayai.

Golang vs C: Perbandingan Prestasi dan KelajuanGolang vs C: Perbandingan Prestasi dan KelajuanApr 21, 2025 am 12:13 AM

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Adakah Golang lebih cepat daripada C? Meneroka hadAdakah Golang lebih cepat daripada C? Meneroka hadApr 20, 2025 am 12:19 AM

Golang melakukan lebih baik dalam masa penyusunan dan pemprosesan serentak, sementara C mempunyai lebih banyak kelebihan dalam menjalankan kelajuan dan pengurusan ingatan. 1. Golang mempunyai kelajuan kompilasi yang cepat dan sesuai untuk pembangunan pesat. 2.C berjalan pantas dan sesuai untuk aplikasi kritikal prestasi. 3. Golang adalah mudah dan cekap dalam pemprosesan serentak, sesuai untuk pengaturcaraan serentak. 4.C Pengurusan memori manual memberikan prestasi yang lebih tinggi, tetapi meningkatkan kerumitan pembangunan.

Golang: Dari perkhidmatan web ke pengaturcaraan sistemGolang: Dari perkhidmatan web ke pengaturcaraan sistemApr 20, 2025 am 12:18 AM

Aplikasi Golang dalam perkhidmatan web dan pengaturcaraan sistem terutamanya ditunjukkan dalam kesederhanaan, kecekapan dan kesesuaiannya. 1) Dalam perkhidmatan web, Golang menyokong penciptaan aplikasi web berprestasi tinggi dan API melalui perpustakaan HTTP yang kuat dan keupayaan pemprosesan serentak. 2) Dalam pengaturcaraan sistem, Golang menggunakan ciri -ciri yang berdekatan dengan perkakasan dan keserasian dengan bahasa C sesuai untuk pembangunan sistem operasi dan sistem tertanam.

Golang vs C: Penanda aras dan prestasi dunia nyataGolang vs C: Penanda aras dan prestasi dunia nyataApr 20, 2025 am 12:18 AM

Golang dan C mempunyai kelebihan dan kekurangan mereka sendiri dalam perbandingan prestasi: 1. Golang sesuai untuk perselisihan yang tinggi dan perkembangan pesat, tetapi pengumpulan sampah boleh menjejaskan prestasi; 2.C menyediakan prestasi yang lebih tinggi dan kawalan perkakasan, tetapi mempunyai kerumitan pembangunan yang tinggi. Apabila membuat pilihan, anda perlu mempertimbangkan keperluan projek dan kemahiran pasukan dengan cara yang komprehensif.

Golang vs Python: Analisis PerbandinganGolang vs Python: Analisis PerbandinganApr 20, 2025 am 12:17 AM

Golang sesuai untuk senario pengaturcaraan berprestasi tinggi dan serentak, manakala Python sesuai untuk pembangunan pesat dan pemprosesan data. 1.Golang menekankan kesederhanaan dan kecekapan, dan sesuai untuk perkhidmatan back-end dan microservices. 2. Python terkenal dengan sintaks ringkas dan perpustakaan yang kaya, sesuai untuk sains data dan pembelajaran mesin.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma