Membina Enjin Carian Web dalam Go dengan Elasticsearch

Susan Sarandon
Lepaskan: 2024-11-05 10:33:02
asal
441 orang telah melayarinya

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!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!