Maison  >  Article  >  Java  >  Implémenter la fonctionnalité de recherche en texte intégral à l'aide de Spring Boot et Elasticsearch

Implémenter la fonctionnalité de recherche en texte intégral à l'aide de Spring Boot et Elasticsearch

WBOY
WBOYoriginal
2023-06-22 19:17:061655parcourir

Avec la croissance explosive de l'information, il est de plus en plus difficile pour les utilisateurs d'obtenir rapidement les informations dont ils ont besoin. Dans ce cas, la fonctionnalité de recherche en texte intégral est devenue l’une des fonctionnalités indispensables pour chaque site Web et application. Dans cet article, nous présenterons comment implémenter la fonctionnalité de recherche en texte intégral dans une application utilisant le framework Spring Boot et la base de données Elasticsearch.

Qu'est-ce qu'Elasticsearch ?

Elasticsearch est un moteur de recherche distribué open source qui permet une analyse facile des données et une recherche en temps réel. Il est basé sur la bibliothèque du moteur de recherche Apache Lucene et fournit une API RESTful qui permet aux développeurs d'accéder facilement à ses fonctionnalités. Presque tous les types de données peuvent être stockés et recherchés à l'aide d'Elasticsearch, y compris les données structurées, non structurées et géospatiales.

Intégration de Spring Boot et Elasticsearch

Spring Boot est un framework permettant de créer des applications Spring autonomes basées sur la production. Il simplifie le développement d'applications Spring grâce à une configuration automatique et une approche de convention sur configuration. Pour l'intégration à Elasticsearch, Spring Boot fournit des options de configuration et de personnalisation par défaut prêtes à l'emploi.

Tout d'abord, nous devons ajouter la dépendance d'Elasticsearch à l'application Spring Boot. Ajoutez les dépendances suivantes dans le fichier build.gradle :

dependencies {

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-elasticsearch', version: '2.5.0'

}

Après avoir ajouté cette dépendance, nous pouvons facilement définir des modèles et des index à l'aide du modèle Repository de la bibliothèque Spring Data Elasticsearch. Spring Data Elasticsearch nous fournit de nombreuses classes et méthodes pour faire fonctionner Elasticsearch à partir de l'application. Nous devons également définir la configuration de la connexion Elasticsearch dans le fichier de configuration de l'application Spring Boot. Nous pouvons ajouter la configuration suivante dans le fichier application.properties :

// Définir l'adresse et le port d'elasticsearch
spring.data.elasticsearch.cluster-nodes=localhost:9200

// Définir le nom d'utilisateur et le mot de passe d'elasticsearch ( si nécessaire Si authentifié)
spring.data.elasticsearch.properties.username=elasticsearch
spring.data.elasticsearch.properties.password=password

Définir les index et les types

Avant d'utiliser Elasticsearch pour la recherche en texte intégral, nous devons d'abord définir des index et des types. Dans Elasticsearch, un index équivaut à une base de données et un type équivaut à une table dans la base de données. Nous pouvons utiliser les annotations fournies dans Spring Data Elasticsearch pour définir nos entités et index. Voici un exemple simple :

// Définir l'entité
@Document(indexName = "articles")
public class Article {

// 定义id
@Id
private String id;

// 定义标题
@Field(type = FieldType.Text)
private String title;

// 定义内容
@Field(type = FieldType.Text)
private String content;

// 定义创建时间
@Field(type = FieldType.Date)
private Date createTime;

// 省略get和set方法

}

Dans l'exemple ci-dessus, nous utilisons l'annotation @Document pour définir nos entités et nos index . Nous avons créé un index avec indexName sous forme d'articles et utilisé l'annotation @Field pour annoter les champs de nos entités qui doivent être enregistrés dans Elasticsearch. Ensuite, nous pouvons créer une interface ArticleRepository, qui hérite de la classe ElasticsearchRepository. Cette interface peut fournir un grand nombre de méthodes de requête de données basées sur Elasticsearch via l'héritage. Voici un exemple simple :

public interface ArticleRepository extends ElasticsearchRepository42407456a0fce5117f6e0cdb707509c6 {

List<Article> findByTitle(String title);

}

Pour l'interface ArticleRepository définie dans l'exemple ci-dessus, Spring Data Elasticsearch créera automatiquement pour nous l'interface de couche de service qui implémente Les classes d'entités concrètes sont automatiquement injectées dans le conteneur Spring pour nous au démarrage de l'application. Dans cette interface de service, nous avons défini une méthode findByTitle, qui est utilisée pour interroger les articles en fonction de leurs titres. En utilisation réelle, nous pouvons facilement utiliser Elasticsearch via ArticleRepository, y compris l'ajout, la suppression, l'interrogation, etc.

Implémentation de la fonction de recherche en texte intégral

Après avoir défini les entités, les index et les types, nous pouvons lancer des opérations de recherche en texte intégral sur eux. Dans Elasticsearch, la fonctionnalité de recherche en texte intégral est implémentée en créant des requêtes. L'interrogation est le processus d'exécution d'une recherche dans des index, des types et des champs spécifiés. Voici un exemple simple :

public interface ArticleRepository extends ElasticsearchRepository42407456a0fce5117f6e0cdb707509c6 {

List<Article> searchArticle(String keyword);

}

Dans cet exemple, nous définissons une méthode searchArticle pour rechercher des articles. Dans cette méthode, nous pouvons utiliser le générateur QueryBuilder d'Elasticsearch pour créer des conditions de requête, comme suit :

public List59da28f5dfb08cc4320eedd48bbc94b6 searchArticle(String keyword) {

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
builder.withQuery(QueryBuilders.boolQuery()
            .should(QueryBuilders.matchQuery("title", keyword))
            .should(QueryBuilders.matchQuery("content", keyword)));
return elasticsearchTemplate.queryForList(builder.build(), Article.class);

}

Ici, nous utilisons un NativeSearchQueryBuilder pour créer une requête. Nous pouvons utiliser QueryBuilders pour créer différents types de requêtes. Ici, nous utilisons une requête booléenne pour faire correspondre les articles contenant des mots-clés dans leurs titres et leur contenu. Une fois la requête créée, nous pouvons utiliser elasticsearchTemplate.queryForList() pour exécuter la requête et obtenir les résultats. Bien entendu, nous pouvons également utiliser diverses méthodes de requête fournies par Spring Data Elasticsearch pour effectuer des opérations de requête.

Résumé

Dans cet article, nous expliquons comment implémenter la fonctionnalité de recherche en texte intégral à l'aide de Spring Boot et Elasticsearch. Nous avons d'abord présenté les connaissances de base d'Elasticsearch et la méthode d'intégration de Spring Boot et Elasticsearch, puis expliqué en détail comment définir des index et des types et implémenter la fonction de recherche en texte intégral. Après avoir étudié cet article, nous pouvons facilement intégrer la fonction de recherche en texte intégral dans notre application Spring Boot, afin que les utilisateurs puissent trouver plus rapidement les informations requises.

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!

Déclaration:
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