Maison >développement back-end >Golang >Créer un moteur de recherche Web en Go avec Elasticsearch
Les moteurs de recherche Web sont essentiels pour indexer de grandes quantités d’informations en ligne, les rendant accessibles en quelques millisecondes. Dans ce projet, j'ai construit un moteur de recherche en Go (Golang) nommé RelaxSearch. Il combine le web scraping, l'indexation périodique des données et les fonctionnalités de recherche en s'intégrant à Elasticsearch, un puissant moteur de recherche et d'analyse. Dans ce blog, je vais vous présenter les principaux composants de RelaxSearch, son architecture et la manière dont il récupère et indexe efficacement les données pour une recherche rapide basée sur des mots clés.
RelaxSearch est construit autour de deux modules principaux :
Créer un projet de moteur de recherche à partir de zéro est un excellent moyen de comprendre le web scraping, l'indexation des données et les techniques de recherche efficaces. Je voulais créer un moteur de recherche simple mais fonctionnel avec une récupération rapide des données et une extensibilité facile, en utilisant l'efficacité de Go et la puissante indexation d'Elasticsearch.
RelaxEngine est un grattoir Web écrit en Go qui parcourt les pages Web, extrayant et stockant le contenu. Il s'exécute comme une tâche cron, il peut donc fonctionner à intervalles réguliers (par exemple toutes les 30 minutes) pour maintenir l'index à jour avec les dernières données Web. Voici comment cela fonctionne :
RelaxWeb fournit un point de terminaison d'API RESTful, facilitant l'interrogation et la récupération des données stockées dans Elasticsearch. L'API accepte plusieurs paramètres, tels que les mots-clés, la pagination et le filtrage des dates, renvoyant un contenu pertinent au format JSON.
Vous trouverez ci-dessous quelques composants importants et extraits de code de RelaxSearch pour illustrer son fonctionnement.
La fonctionnalité principale se trouve dans le fichier main.go, où RelaxEngine initialise un planificateur utilisant gocron pour gérer les tâches cron, configure le client Elasticsearch et commence l'exploration à partir de l'URL de départ.
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() }
Le fichier crawler.go gère les requêtes de pages Web, extrait le contenu et l'indexe. Grâce au package elastic, chaque page récupérée est stockée dans 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) } }
Dans le service relaxweb, un point de terminaison API fournit des capacités de recherche en texte intégral. Le point de terminaison /search reçoit des requêtes et interroge Elasticsearch, renvoyant un contenu pertinent en fonction de mots-clés.
func searchHandler(w http.ResponseWriter, r *http.Request) { keyword := r.URL.Query().Get("keyword") results := queryElasticsearch(keyword) json.NewEncoder(w).Encode(results) }
git clone https://github.com/Ravikisha/RelaxSearch.git cd RelaxSearch
Configuration
Mettez à jour les fichiers .env pour RelaxEngine et RelaxWeb avec les informations d'identification Elasticsearch.
Exécuter avec Docker
RelaxSearch utilise Docker pour une configuration facile. Exécutez simplement :
docker-compose up --build
RelaxSearch est une démonstration pédagogique et pratique d'un moteur de recherche de base. Bien qu'il s'agisse encore d'un prototype, ce projet a joué un rôle déterminant dans la compréhension des principes fondamentaux du web scraping, de la recherche en texte intégral et de l'indexation efficace des données avec Go et Elasticsearch. Il ouvre des pistes d'amélioration et d'application concrète dans des environnements évolutifs.
Explorez le référentiel GitHub pour essayer RelaxSearch par vous-même !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!