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!

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,

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.

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

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.

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


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

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

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
Editor kod yang mudah digunakan dan percuma
