Membina 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:
- RelaxEngine: Pengikis web yang dikuasakan oleh tugas cron, yang secara berkala merangkak tapak web tertentu, mengekstrak kandungan dan mengindeksnya dalam Elasticsearch.
- 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.
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
- Klon Repositori
git clone https://github.com/Ravikisha/RelaxSearch.git cd RelaxSearch
Tatarajah
Kemas kini fail .env untuk kedua-dua RelaxEngine dan RelaxWeb dengan kelayakan Elasticsearch.Jalankan dengan Docker
RelaxSearch menggunakan Docker untuk persediaan mudah. Jalankan sahaja:
docker-compose up --build
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

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 yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

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, ...

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. � ...

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

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 ...

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

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
