Rumah > Artikel > pembangunan bahagian belakang > Enjin carian anda, Zensearch
Daripada membina aplikasi tindak balas kepada membina enjin carian dan perangkak web saya sendiri untuk pengindeksan. Saya berbesar hati untuk memperkenalkan kepada anda Zensearch, enjin carian di mana anda sebagai pengguna mempunyai lebih kawalan ke atas perkara yang anda inginkan carian anda, anda boleh membuat entri untuk merangkak tapak web yang berbeza dan terus menggunakan fungsi enjin carian jika anda telah sedia ada. data diindeks dalam pangkalan data semasa ia berfungsi, sekarang saya tahu ini mungkin bukan enjin carian yang paling kompleks atau canggih di dunia seperti google atau carian berani tetapi saya membina perkara ini untuk mengukur sejauh mana saya boleh lakukan sendiri dan belajar sebanyak Saya boleh sambil melakukannya, dan oh budak, saya telah belajar banyak.
Semuanya bermula apabila saya membina aplikasi web React saya, sejenis buku biasa untuk memasukkan petikan kegemaran anda atau menambah nota pada halaman khusus itu seolah-olah anda cuba bercakap dengan pengarang atau menaip apa yang anda fikirkan pada masa itu pada halaman yang sepadan dengan halaman buku fizikal anda, ini bukan projek yang buruk tetapi saya hanya bosan membina aplikasi Reactjs, bukan kerana ia buruk tetapi rasanya saya tidak pergi ke mana-mana dengan itu, tiada kedalaman teknikal tentang apa yang saya lakukan dan saya tidak belajar apa-apa daripada membina projek ReactJs tersebut.
jadi saya cuba belajar tentang rangkaian komputer, Sistem pengendalian, seni bina Komputer dan seterusnya selepas beberapa bulan mengkaji dan membina protokol lapisan aplikasi saya sendiri seperti soket web di mana saya boleh mengendalikan berbilang pengguna dan setiap pengguna boleh menyertai yang berbeza ini bilik atau ruang nama di mana mereka boleh berkomunikasi antara satu sama lain dan saya berasa gembira, hidup walaupun. Saya rasa saya boleh melakukan banyak perkara selagi saya memahami cara komputer berfungsi cth: benang, semaphore, proses, susun atur memori, isyarat sampukan dan lain-lain, Jadi saya terfikir sendiri, apakah projek yang boleh saya lakukan untuk menggunakan beberapa perkara yang saya dah belajar?
oh dan saya seorang yang otodidak btw dan saya menggunakan Projek Odin untuk belajar pengaturcaraan dan pembangunan web jadi jeritlah kepada mereka kerana mereka mengajar saya bagaimana untuk menjadi berdikari untuk belajar dan enggan menyerahkan pengaturcara sepanjang kurikulum .
Saya hanya dapat memprogram menggunakan Nodejs, itu adalah roti dan mentega saya bersama-sama dengan skrip taip, jadi saya membina perangkak web menggunakan Nodejs... agak bodoh bukan? Maksud saya rancangannya adalah untuk mencipta perangkak yang boleh merangkak pelbagai URL sumber dari bahagian hadapan dan membenarkan setiap perangkak menghantar data yang diekstrak ini ke pangkalan data, dan seperti yang kita semua tahu Yabascript adalah satu-benang dan setiap tugas tak segerak dikendalikan oleh persekitaran tempat Yavascript dijalankan cth: apis, nod, deno, bun dan selesai penyemak imbas.
jadi melakukan operasi berbilang tugas menggunakan Nodejs adalah misi bunuh diri dan ia adalah, daripada menukar objek halaman web untuk dikodkan kepada penimbal 8-bit tetapi kemudian penimbal tatasusunan dikongsi hanya boleh mengangkut penimbal tatasusunan 64-bit disebabkan data penjajaran jadi saya terpaksa menukar daripada penimbal 8-bit kepada 64-bit dengan menambahkan beberapa pelapik mengimbangi dan kemudian kembali daripada penimbal 64-bit ke Penampan 8-bit selepas menghantar data daripada perangkak ke utas utama dan kemudian akhirnya menghuraikannya ke Objek vajascript... wow seronoknya, ada cara lain untuk menghantar mesej tetapi itu mencipta salinan data yang sama yang ada dalam perangkak ke benang utama jadi saya tidak mahu itu kerana ia akan mengambil banyak ingatan.
Saya terpaksa mengendalikan keadaan perlumbaan menggunakan modul atomics nodejs dan sehingga hari ini saya masih tidak faham bagaimana modul itu berfungsi secara jujur dan sangat menjengkelkan saya sehingga saya terpaksa beralih ke Golang. Saya sangat menyukai bahasa ini, sangat mudah untuk membuat benang mengendalikan keadaan perlumbaan, menggunakan semaphore dan kumpulan tunggu, saya belum lagi perlu menggunakan mutex dan saya teruja untuk mempelajarinya jadi mungkin pada masa hadapan, bersama-sama dengan konteks akan menyeronokkan untuk dipelajari.
Mari kita beralih ke bahagian hadapan bukan? adakah sesiapa di antara anda yang membaca artikel ini dari pakar frontend? Anda mungkin tidak memerlukan rangka kerja itu, ingat saya berkata bahawa saya bosan dengan ReactJs? Nah, ini membuatkan saya menghargai rangka kerja kerana kebolehgunaan semula dan mekanisme pengikatan datanya.
Saya tidak mahu memasukkan terlalu banyak butiran tentang bahagian hadapan tetapi saya menggunakan corak PubSub untuk mengemas kini sebarang perubahan UI apabila data berubah dan menggunakan komponen web bersama-sama dengan shadow dom untuk mencipta komponen yang boleh digunakan semula, shadow dom adalah sukar untuk mengakses dalam javascript dan gaya kerana ia diasingkan daripada keseluruhan pokok dom jadi mengaksesnya menggunakan CSS dan API DOM tidak akan berfungsi, jadi ya itulah satu-satunya cabaran yang saya hadapi tetapi ia menyeronokkan.. ia menyeronokkan apabila saya memindahkan perangkak daripada Nodejs ke Go.
Terdapat beberapa fungsi yang saya belum lagi dilaksanakan kerana saya sangat ingin mempamerkan projek itu tetapi itu tidak begitu penting bagi saya walaupun ini adalah projek yang sedang berjalan, ini tidak akan menjadi satu dan projek selesai Saya akan terus menambah baik zensearch pada masa hadapan jadi buat masa ini berikut adalah beberapa perkara utama yang hilang:
Melaksanakan senarai tapak web yang telah diindeks untuk dipaparkan kepada pengguna di bahagian hadapan.
Simpan halaman web yang paling baru dirangkak untuk kesinambungan.
Buat pembatalan untuk merangkak tetapi masih menyimpan halaman yang diindeks sehingga tahap itu.
Penghadan saiz mesej Rabbitmq untuk penskalaan, jika pangkalan data mengandungi lebih daripada saiz lalai yang ditetapkan dalam rabbitmq, broker mesej akan membuang ralat dan ranap, jadi untuk mengelakkan ini saya akan cuba melaksanakan bingkai tetingkap algoritma yang digunakan dalam tcp dengan mencipta mekanisme saluran paip di mana tatasusunan halaman web akan dipecahkan kepada segmen dan dihantar ke enjin carian mengikut saiz N di mana N ialah saiz tetingkap, saya masih memerlukan untuk memikirkan perkara ini.
Beri pengguna keupayaan untuk mengalih keluar tapak web Terindeks mereka.
Saya ingin menulis lebih lanjut tentang apa yang saya pelajari dan beberapa nuansa perjalanan pembangunan saya tetapi saya fikir ini akan menjadi terlalu panjang, jadi buat masa ini saya ingin mempamerkan projek terhebat saya, dan saya berbesar hati untuk mendapatkan maklum balas daripada anda semua jika anda mempunyai masa dan beritahu saya jika terdapat sebarang masalah dan penambahbaikan yang boleh saya lakukan untuk menjadikan Zensearch lebih baik, oh dan ini semua terima kasih kepada primeagean lelaki ini memberi inspirasi kepada saya untuk mendalami sesuatu dan mempelajari asasnya sebaliknya daripada hanya menjalankan npm create vite@latest my-vue-app -- --template react-ts dalam terminal, yang sememangnya membuat saya tidak selamat tentang diri saya sebagai pengaturcara dan perkara yang saya tahu tetapi kerana rasa tidak selamat itu saya telah belajar perkara baharu sekarang saya sentiasa berusaha untuk mempelajari lebih banyak perkara dan berbesar hati untuk belajar daripada maklum balas ANDA jadi terima kasih kerana mendengar ceramah ted saya.
Repositori Github untuk Zensearch
Atas ialah kandungan terperinci Enjin carian anda, Zensearch. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!