普通Java项目集成ElasticSearch全文搜索引擎

文章目录

    • 全文搜索概述
      • 文本数据
    • 集成ElasticSearch全文搜索引擎
      • Java普通项目集成步骤
      • 依赖包
      • ESClientUtil工具类
    • 文档CRUD
      • 添加文档
      • 获取文档
      • 更新文档
      • 批量操作
    • 练习
      • 自定义用户表查询
      • 需求:name包含:我在学Java
      • 需求:age在1~12之间
      • 需求:age = 1
      • 需求:name包含:我在学Java和age在1~12之间
    • 三种不同类型的查询
      • matchQuery
      • rangeQuery
      • termQuery

全文搜索概述

主要针对文本数据的搜索,全文搜索的目的就是把非结构化的数据变成有结构化的数据进行搜索

文本数据

结构化—数据库的表里面的数据 id name age
半结构化数据 — XML JSON {“id”:1,“name”:“张三”,“age”:50}
非结构化数据 — word PDF (java类库)

集成ElasticSearch全文搜索引擎

纯的java去连接ElasticSearch
spring去连接ElasticSearch
springboot去连接ElasticSearch

Java普通项目集成步骤

  1. 准备普通Maven项目:导入ElasticSearch依赖
  2. 连接ElasticSearch:封装成工具类
  3. 进行文档CRUD

依赖包

<dependencies>
    <!--  
        org.elasticsearch.client 提供的 TransportClient,它是与 Elasticsearch 通信的老版客户端  
        (注意:TransportClient 在 Elasticsearch 7.x 版本后已被弃用,建议使用 REST High Level Client)  
        groupId 指定了组织ID(通常是项目的组织或公司)  
        artifactId 指定了项目的唯一标识符  
        version 指定了依赖的版本号  
    -->  
    <dependency>  
        <groupId>org.elasticsearch.client</groupId>  
        <artifactId>transport</artifactId>  
        <version>6.8.6</version>  
    </dependency>  
  
    <!-- JUnit 是一个流行的 Java 单元测试框架 -->  
    <!--  
        groupId 指定了 JUnit 的组织ID  
        artifactId 指定了 JUnit 的唯一标识符  
        version 指定了 JUnit 的版本号  
        scope 指定了该依赖的作用范围,compile 表示该依赖在编译、测试和运行阶段都需要  
    -->  
    <dependency>  
        <groupId>junit</groupId>  
        <artifactId>junit</artifactId>  
        <version>4.12</version>  
        <scope>compile</scope>  
    </dependency>  
</dependencies>

ESClientUtil工具类

package org.example.util;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.net.InetAddress;
import java.net.UnknownHostException;

public class ESClientUtil {
   

    /**
     * 获取 Elasticsearch 的 TransportClient 客户端实例。
     * 客户端会连接到配置中的 Elasticsearch 集群。
     *
     * @return 返回 Elasticsearch 的 TransportClient 客户端实例,如果连接失败则返回 null
     */
    public static TransportClient getClient(){
   
        TransportClient client = null;

        // 构建 Elasticsearch 设置对象,设置集群名称为 "elasticsearch"
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch").build();

        try {
   
            // 使用提供的设置初始化 PreBuiltTransportClient 对象
            client = new PreBuiltTransportClient(settings);

            //添加一个传输地址(本地 127.0.0.1 端口 9300)
            client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        } catch (UnknownHostException e) {
   
            // 如果在解析主机名时发生异常(比如地址不存在),则打印堆栈跟踪
            e.printStackTrace();
        }

        // 返回创建好的客户端实例,如果发生异常,则返回 null
        return client;
    }


}

文档CRUD

添加文档

	/**
     * 添加文档
     */
    @Test
    public void testAdd() {
   
        //获取客户端对象
        TransportClient client = ESClientUtil.getClient();

        Map<String,Object> data = new HashMap<>();
        data.put(

你可能感兴趣的:(微服务技术栈储备,搜索引擎,java,elasticsearch)