Rumah pembangunan bahagian belakang Golang Membina Enjin Carian Web dalam Go dengan Elasticsearch

Membina Enjin Carian Web dalam Go dengan Elasticsearch

Nov 05, 2024 am 10:33 AM

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()
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

Menyediakan RelaxSearch

  1. Klon Repositori
   git clone https://github.com/Ravikisha/RelaxSearch.git
   cd RelaxSearch
Salin selepas log masuk
  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
Salin selepas log masuk

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 Laman Web ini
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

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

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah kelemahan debian openssl Apakah kelemahan debian openssl Apr 02, 2025 am 07:30 AM

OpenSSL, sebagai perpustakaan sumber terbuka yang digunakan secara meluas dalam komunikasi yang selamat, menyediakan algoritma penyulitan, kunci dan fungsi pengurusan sijil. Walau bagaimanapun, terdapat beberapa kelemahan keselamatan yang diketahui dalam versi sejarahnya, yang sebahagiannya sangat berbahaya. Artikel ini akan memberi tumpuan kepada kelemahan umum dan langkah -langkah tindak balas untuk OpenSSL dalam sistem Debian. Debianopenssl yang dikenal pasti: OpenSSL telah mengalami beberapa kelemahan yang serius, seperti: Kerentanan Pendarahan Jantung (CVE-2014-0160): Kelemahan ini mempengaruhi OpenSSL 1.0.1 hingga 1.0.1f dan 1.0.2 hingga 1.0.2 versi beta. Penyerang boleh menggunakan kelemahan ini untuk maklumat sensitif baca yang tidak dibenarkan di pelayan, termasuk kunci penyulitan, dll.

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Bagaimana cara menentukan pangkalan data yang berkaitan dengan model dalam beego orm? Apr 02, 2025 pm 03:54 PM

Di bawah rangka kerja beegoorm, bagaimana untuk menentukan pangkalan data yang berkaitan dengan model? Banyak projek beego memerlukan pelbagai pangkalan data untuk dikendalikan secara serentak. Semasa menggunakan beego ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Kaedah Pemantauan PostgreSQL di bawah Debian Kaedah Pemantauan PostgreSQL di bawah Debian Apr 02, 2025 am 07:27 AM

Artikel ini memperkenalkan pelbagai kaedah dan alat untuk memantau pangkalan data PostgreSQL di bawah sistem Debian, membantu anda memahami pemantauan prestasi pangkalan data sepenuhnya. 1. Gunakan PostgreSQL untuk membina pemantauan PostgreSQL sendiri menyediakan pelbagai pandangan untuk pemantauan aktiviti pangkalan data: PG_STAT_ACTIVITY: Memaparkan aktiviti pangkalan data dalam masa nyata, termasuk sambungan, pertanyaan, urus niaga dan maklumat lain. PG_STAT_REPLITI: Memantau status replikasi, terutamanya sesuai untuk kluster replikasi aliran. PG_STAT_DATABASE: Menyediakan statistik pangkalan data, seperti saiz pangkalan data, masa komitmen/masa rollback transaksi dan petunjuk utama lain. 2. Gunakan alat analisis log pgbadg

See all articles