Maison  >  Article  >  Java  >  Comment utiliser Java pour développer une application de recherche en texte intégral basée sur Elasticsearch

Comment utiliser Java pour développer une application de recherche en texte intégral basée sur Elasticsearch

WBOY
WBOYoriginal
2023-09-21 13:33:11875parcourir

Comment utiliser Java pour développer une application de recherche en texte intégral basée sur Elasticsearch

Comment utiliser Java pour développer une application de recherche en texte intégral basée sur Elasticsearch

La recherche en texte intégral est une technologie très importante à l'ère de l'information d'aujourd'hui. Elle permet de rechercher rapidement et avec précision les mots-clés requis par les utilisateurs à partir de grandes quantités de données. des données textuelles ou des informations connexes. En tant que moteur de recherche distribué open source, Elasticsearch a été largement utilisé pour ses capacités efficaces de récupération de texte intégral, son analyse de données en temps réel et son évolutivité. Cet article explique comment utiliser Java pour développer une application de recherche en texte intégral basée sur Elasticsearch et fournit des exemples de code spécifiques.

  1. Travail de préparation
    Avant de commencer le développement, nous devons préparer le travail suivant :
  2. Installer l'environnement de développement Java (JDK)
  3. Installer le serveur Elasticsearch et démarrer le service
  4. Importer la bibliothèque client Java Elasticsearch, par exemple, en utilisant Maven Importez les dépendances suivantes :
<dependencies>
  <dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.10.0</version>
  </dependency>
</dependencies>
  1. Créer un client Elasticsearch
    Tout d'abord, nous devons créer un client pour nous connecter au serveur Elasticsearch. Une instance client peut être créée à l'aide du code suivant :
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;

public class ElasticsearchClient {
    public static RestHighLevelClient createClient() {
        // 配置Elasticsearch服务器地址
        RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "http"));
        // 创建高级客户端实例
        RestHighLevelClient client = new RestHighLevelClient(builder);
        return client;
    }
}
  1. Créer un index
    Ensuite, nous devons créer un index (Index) pour stocker les données de notre document. Les index sont similaires aux tables d'une base de données et nous pouvons stocker différents types de données de documents dans différents index. Un index peut être créé en utilisant le code suivant :
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentFactory.*;

public class IndexCreator {
    public static void createIndex(String indexName) {
        try {
            RestHighLevelClient client = ElasticsearchClient.createClient();
            
            // 创建索引请求
            CreateIndexRequest request = new CreateIndexRequest(indexName);
            
            // 设置索引的映射规则
            XContentBuilder mappingBuilder = XContentFactory.jsonBuilder();
            mappingBuilder.startObject();
            mappingBuilder.startObject("properties");
            mappingBuilder.startObject("title");
            mappingBuilder.field("type", "text");
            mappingBuilder.endObject();
            mappingBuilder.startObject("content");
            mappingBuilder.field("type", "text");
            mappingBuilder.endObject();
            mappingBuilder.endObject();
            mappingBuilder.endObject();
            
            request.mapping(mappingBuilder);
            
            // 执行创建索引请求
            CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
            
            // 处理响应结果
            if (response.isAcknowledged()) {
                System.out.println("索引创建成功:" + indexName);
            } else {
                System.out.println("索引创建失败:" + indexName);
            }
            
            // 关闭客户端连接
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Index Documents
    Avec l'index en place, nous pouvons stocker les données du document dans l'index. Un document est similaire à un enregistrement dans une base de données. Nous pouvons stocker plusieurs documents sous le même index. Vous pouvez utiliser le code suivant pour stocker les données du document dans l'index :
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

public class DocumentIndexer {
    public static void indexDocument(String indexName, String documentId, String title, String content) {
        try {
            RestHighLevelClient client = ElasticsearchClient.createClient();
            
            // 创建文档索引请求
            IndexRequest request = new IndexRequest(indexName);
            request.id(documentId);
            request.source("title", title);
            request.source("content", content);
            
            // 执行文档索引请求
            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            
            // 处理响应结果
            if (response.status().getStatus() == 201) {
                System.out.println("文档索引成功:" + documentId);
            } else {
                System.out.println("文档索引失败:" + documentId);
            }
            
            // 关闭客户端连接
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. Rechercher des documents
    Avec l'index des documents, nous pouvons rechercher des documents contenant des mots-clés grâce à la récupération de texte intégral. Vous pouvez utiliser le code suivant pour effectuer une recherche de document :
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryBuilders.*;
import org.elasticsearch.search.builder.SearchSourceBuilder;

public class DocumentSearcher {
    public static void searchDocument(String indexName, String keyword) {
        try {
            RestHighLevelClient client = ElasticsearchClient.createClient();
            
            // 创建搜索请求
            SearchRequest request = new SearchRequest(indexName);
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            sourceBuilder.query(QueryBuilders.matchQuery("content", keyword));
            request.source(sourceBuilder);
            
            // 执行搜索请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            
            // 处理响应结果
            if (response.getHits().getTotalHits().value > 0) {
                System.out.println("搜索结果:");
                for (SearchHit hit : response.getHits().getHits()) {
                    System.out.println(hit.getSourceAsString());
                }
            } else {
                System.out.println("未找到相关文档");
            }
            
            // 关闭客户端连接
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

En utilisant l'exemple de code ci-dessus, nous pouvons terminer le développement d'une application de récupération de texte intégral basée sur Elasticsearch. En créant un index, en indexant des documents et en recherchant des documents, nous pouvons obtenir une récupération de texte intégral efficace et précise. Bien entendu, en plus des fonctions de base présentées ci-dessus, Elasticsearch prend également en charge diverses requêtes avancées, analyses globales, déploiement distribué et autres fonctionnalités, et peut être développé et étendu en fonction de besoins spécifiques. J'espère que cet article vous sera utile et je vous souhaite plus de succès dans le domaine de la récupération de texte intégral !

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