Maison > développement back-end > Golang > le corps du texte

Créer un moteur de recherche Web en Go avec Elasticsearch

Susan Sarandon
Libérer: 2024-11-05 10:33:02
original
441 Les gens l'ont consulté

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.

Présentation de RelaxSearch

RelaxSearch est construit autour de deux modules principaux :

  1. RelaxEngine : un grattoir Web alimenté par des tâches cron, qui explore périodiquement les sites Web spécifiés, extrait le contenu et l'indexe dans Elasticsearch.
  2. RelaxWeb : un serveur API RESTful qui permet aux utilisateurs de rechercher les données indexées, en fournissant la pagination, le filtrage et la mise en évidence du contenu pour des réponses conviviales.

Motivation du projet

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.

Principales fonctionnalités

  • Exploration automatisée : à l'aide de tâches cron, RelaxEngine peut s'exécuter à intervalles réguliers, récupérant les données et les stockant dans Elasticsearch.
  • Recherche en texte intégral : RelaxWeb offre une capacité de recherche en texte intégral, indexant le contenu par mots-clés, rendant la récupération rapide.
  • API REST : accessible via une API RESTful avec des paramètres de pagination, de filtrage des dates et de mise en évidence du contenu.
  • Stockage des données : le contenu indexé est stocké dans Elasticsearch, permettant des requêtes évolutives et très réactives.

Architecture de RelaxSearch

1. RelaxEngine (Web Scraper et Indexeur)

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 :

  • URL de départ : RelaxEngine commence à extraire une URL de départ spécifiée, puis suit les liens au sein du site jusqu'à une profondeur configurable.
  • Analyse de contenu : pour chaque page, il extrait les titres, les descriptions et les mots-clés, construisant ainsi un ensemble de données informatif.
  • Indexation dans Elasticsearch : le contenu récupéré est indexé dans Elasticsearch, prêt pour la recherche en texte intégral. Les données de chaque page sont stockées avec un identifiant unique, un titre, une description et d'autres métadonnées.

2. RelaxWeb (API de recherche)

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.

  • Point de terminaison de l'API : /search
  • Paramètres de requête :
    • mot-clé : terme de recherche principal.
    • de et taille : Contrôle de pagination.
    • dateRangeStart et dateRangeEnd : filtrez les résultats en fonction de l'horodatage des données.

Building a Web Search Engine in Go with Elasticsearch

Composants clés et extraits de code

Vous trouverez ci-dessous quelques composants importants et extraits de code de RelaxSearch pour illustrer son fonctionnement.

Code Go principal pour RelaxEngine

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()
}
Copier après la connexion

Logique d'exploration et d'indexation

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)
    }
}
Copier après la connexion

Rechercher du code API dans RelaxWeb

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)
}
Copier après la connexion

Configuration de RelaxSearch

  1. Cloner le référentiel
   git clone https://github.com/Ravikisha/RelaxSearch.git
   cd RelaxSearch
Copier après la connexion
  1. Configuration

    Mettez à jour les fichiers .env pour RelaxEngine et RelaxWeb avec les informations d'identification Elasticsearch.

  2. Exécuter avec Docker

    RelaxSearch utilise Docker pour une configuration facile. Exécutez simplement :

   docker-compose up --build
Copier après la connexion

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

Défis et améliorations

  • Évolutivité : Elasticsearch évolue bien, mais la gestion d'un scraping étendu avec de nombreux liens nécessite des optimisations pour des déploiements à plus grande échelle.
  • Gestion robuste des erreurs : L'amélioration des mécanismes de gestion des erreurs et de nouvelle tentative augmenterait la résilience.

Conclusion

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!