Elasticsearch 详细使用文档及java案例

这篇具有很好参考价值的文章主要介绍了Elasticsearch 详细使用文档及java案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch 使用文档

简介

Elasticsearch 是一个开源的分布式搜索引擎,它可以快速地存储、搜索和分析大量数据。它使用 Lucene 作为底层搜索引擎,提供了 RESTful API 接口,支持多种数据格式和查询语言。

本文档将介绍 Elasticsearch 的基本概念、安装和配置、数据索引和查询、集群管理等方面的内容。

基本概念

索引

Elasticsearch 中的索引类似于关系型数据库中的表,它是一个包含多个文档的逻辑容器。每个索引都有一个唯一的名称,可以包含多个类型。

类型

类型是索引中的一个逻辑分组,它定义了文档的结构和字段。每个类型都有一个唯一的名称,可以包含多个文档。

文档

文档是 Elasticsearch 中的基本单位,它是一个 JSON 格式的数据对象。每个文档都有一个唯一的 ID,它属于一个类型,并存储在一个索引中。

分片

为了支持大规模数据存储和查询,Elasticsearch 将索引分成多个分片,每个分片可以存储一部分数据。分片可以分布在不同的节点上,从而实现分布式存储和查询。

副本

为了提高数据的可用性和容错性,Elasticsearch 支持将分片复制到多个节点上,这些复制分片称为副本。副本可以提高查询的并发性和响应速度,同时也可以在节点故障时提供数据的备份和恢复。

安装和配置

安装 Elasticsearch

Elasticsearch 可以在 Windows、Linux、Mac OS X 等操作系统上运行,它的安装非常简单,只需要下载对应版本的压缩包,解压后即可使用。

下载地址:https://www.elastic.co/downloads/elasticsearch

配置 Elasticsearch

Elasticsearch 的配置文件位于 config/elasticsearch.yml,可以通过修改该文件来配置 Elasticsearch 的参数。

以下是一些常用的配置参数:

  • cluster.name:集群名称,默认为 elasticsearch
  • node.name:节点名称,默认为随机生成的名称。
  • network.host:节点绑定的 IP 地址,默认为 localhost
  • http.port:HTTP 服务监听的端口号,默认为 9200
  • discovery.zen.ping.unicast.hosts:集群中其他节点的 IP 地址列表。

数据索引和查询

索引数据

要索引数据,首先需要创建一个索引,然后定义一个类型,最后将文档添加到该类型中。

以下是一个示例:

# 创建索引
PUT /my_index

# 定义类型
PUT /my_index/my_type/_mapping
{
  "properties": {
    "title": {
      "type": "text"
    },
    "content": {
      "type": "text"
    },
    "timestamp": {
      "type": "date"
    }
  }
}

# 添加文档
PUT /my_index/my_type/1
{
  "title": "Hello World",
  "content": "This is my first Elasticsearch document",
  "timestamp": "2022-01-01T00:00:00"
}

查询数据

要查询数据,可以使用 Elasticsearch 提供的 RESTful API 接口,支持多种查询语言和查询方式。

以下是一些常用的查询语句:

  • GET /my_index/my_type/_search:查询所有文档。
  • GET /my_index/my_type/_search?q=title:hello:查询标题包含 “hello” 的文档。
  • GET /my_index/my_type/_search?q=content:elasticsearch:查询内容包含 “elasticsearch” 的文档。
  • GET /my_index/my_type/_search?q=timestamp:>2022-01-01:查询时间戳大于 “2022-01-01” 的文档。
  • GET /my_index/my_type/_search?q=title:hello AND content:elasticsearch:查询标题包含 “hello” 并且内容包含 “elasticsearch” 的文档。

集群管理

集群健康状态

要查看集群的健康状态,可以使用以下命令:

GET /_cluster/health

该命令将返回一个 JSON 格式的响应,包含集群的健康状态、节点数量、分片数量等信息。

节点信息

要查看节点的信息,可以使用以下命令:

GET /_cat/nodes?v

该命令将返回一个表格格式的响应,包含节点的名称、IP 地址、状态等信息。

分片信息

要查看分片的信息,可以使用以下命令:

GET /_cat/shards?v

该命令将返回一个表格格式的响应,包含分片的索引名称、分片编号、状态等信息。

节点加入和退出

要将节点加入集群,可以在节点的配置文件中设置 discovery.zen.ping.unicast.hosts

要将一个新节点加入到Elasticsearch集群中,需要做以下步骤:

  • 在新节点上安装Elasticsearch软件。
  • 配置新节点的elasticsearch.yml文件,指定集群名称和节点名称。
  • 启动新节点的Elasticsearch服务。

新节点启动后,它会自动加入到集群中,并开始接收和处理请求。

节点退出集群:

要将一个节点从Elasticsearch集群中移除,需要做以下步骤:

  • 停止节点上的Elasticsearch服务。
  • 在集群中的其他节点上运行_cluster/nodes/stats API,以查看节点的状态和信息。
  • 在集群中的其他节点上运行_cluster/nodes/_shutdown API,以关闭要移除的节点。

节点关闭后,它会自动从集群中移除,并停止处理请求。

需要注意的是,节点的加入和退出可能会对集群的性能和可用性产生影响,因此应该在非高峰期进行操作,并确保在操作前备份数据。

Elasticsearch 提供的 RESTful API 接口 Java 的使用方法和案例

Elasticsearch 是一个开源的分布式搜索引擎,提供了 RESTful API 接口,可用于实现搜索、聚合、索引等功能。在 Java 中,我们可以使用 Elasticsearch 的 Java API 或者直接调用 RESTful API 接口来操作 Elasticsearch。

本文将介绍 Elasticsearch RESTful API 接口的使用方法和一个简单的案例。

使用 Elasticsearch RESTful API 接口
Elasticsearch 的 RESTful API 接口可以通过 HTTP 请求来访问,常用的请求方法包括 GET、POST、PUT、DELETE 等。下面是一个使用 Elasticsearch RESTful API 接口的简单示例:

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

public class ElasticsearchRestClient {
    private static CloseableHttpClient httpClient =
            HttpClients.createDefault();
    private static final String INDEX_NAME = "test_index";
    private static final String BASE_URL = "http://localhost:9200/" + INDEX_NAME + "/_doc/";

    public static void main(String[] args) {
        try {
            // 创建文档
            createDocument();

            // 获取文档
            getDocument();

            // 更新文档
            updateDocument();

            // 删除文档
            deleteDocument();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void createDocument() throws IOException {
        String json = "{ \"name\" : \"John\", \"age\" : 30 }";
        HttpPost httpPost = new HttpPost(BASE_URL + "1");
        httpPost.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
        CloseableHttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        System.out.println("Create document result: " + result);
        response.close();
    }

    public static void getDocument() throws IOException {
        HttpGet httpGet = new HttpGet(BASE_URL + "1");
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        System.out.println("Get document result: " + result);
        response.close();
    }

    public static void updateDocument() throws IOException {
        String json = "{ \"name\" : \"John Doe\", \"age\" : 35 }";
        HttpPut httpPut = new HttpPut(BASE_URL + "1");
        httpPut.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
        CloseableHttpResponse response = httpClient.execute(httpPut);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        System.out.println("Update document result: " + result);
        response.close();
    }

    public static void deleteDocument() throws IOException {
        HttpDelete httpDelete = new HttpDelete(BASE_URL + "1");
        CloseableHttpResponse response = httpClient.execute(httpDelete);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        System.out.println("Delete document result: " + result);
        response.close();
    }
}

在上面的示例中,我们使用了 Apache HttpComponents 来发送 HTTP 请求。其中,创建文档使用了 POST 请求,获取文档使用了 GET 请求,更新文档使用了 PUT 请求,删除文档使用了 DELETE 请求。

示例:在 Elasticsearch 中搜索文档

下面是一个简单的示例,演示了如何在 Elasticsearch 中搜索文档。

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.IOException;

public class ElasticsearchSearchClient {
    private static CloseableHttpClient httpClient =
            HttpClients.createDefault();
    private static final String INDEX_NAME = "test_index";
    private static final String SEARCH_URL = "http://localhost:9200/" + INDEX_NAME + "/_search";

    public static void main(String[] args) {
        try {
            searchDocument();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void searchDocument() throws IOException {
        String json = "{ \"query\": { \"match\": { \"name\": \"John\" } } }";
        HttpGet httpGet = new HttpGet(SEARCH_URL);
        httpGet.setEntity(new StringEntity(json, ContentType.APPLICATION_JSON));
        CloseableHttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        System.out.println("Search document result: " + result);
        response.close();
    }
}

在上面的示例中,我们使用了 Elasticsearch 的查询语法,通过 match 查询来搜索名字为 John 的文档。

结论

在本文中,我们介绍了 Elasticsearch RESTful API 接口的使用方法和一个简单的案例。使用 Elasticsearch RESTful API 接口,我们可以在 Java 中方便地操作 Elasticsearch,实现搜索、聚合、索引等功能。文章来源地址https://www.toymoban.com/news/detail-691225.html

到了这里,关于Elasticsearch 详细使用文档及java案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticSearch7版本文档中文属性模糊查询不准确

    1、问题:es文档中的某个属性值name的值如下所示 name\\\":\\\"catalog=Catalog(value=699015935012372480, displayName=/默认分组), status=3, updaterName=admin, updateTime=2023-02-01 14:33:17)status:已发布” 通过java模糊查询的api(QueryBuilders.fuzzyQuery)查询name为“已”的时候可以查询,查询为“已发布”的时候查

    2024年02月02日
    浏览(46)
  • ElasticSearch创建文档以及索引文档的详细流程

            当我们发起一个查询请求之后,ES是怎么处理这个请求然后返回数据的呢?今天就来详细说一下。 首先看一下整体结构:           在集群模式下一个索引有多个分片,在上图中有三个节点(一个主节点两个从节点),一个索引被分为两个分片(P0、P1),每个主分片有两

    2024年02月01日
    浏览(48)
  • 黑马旅游案例(包括搜索,分页,广告置顶)中使用 elasticsearch 7.17.9 Java API

    引言 学习黑马 SpringCloud 的 es 部分时发现老师用的是es的高级客户端来操作es的,而高级客户端已经显示弃用,上网搜索发现关于新的 Java client API 只有基础的索引、文档操作,没有关于这种稍复杂案例的操作,于是自己琢磨整理了一份笔记,也为其他学习最新的 es 的小伙伴

    2024年02月11日
    浏览(34)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(41)
  • 【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理

    在 Elasticsearch 中,通过 RestAPI 进行 DSL 查询语句的构建通常是通过 HighLevelRestClient 中的 resource() 方法来实现的。该方法包含了查询、排序、分页、高亮等所有功能,为构建复杂的查询提供了便捷的接口。 RestAPI 中构建查询条件的核心部分是由一个名为 QueryBuilders 的工具类提供

    2024年01月16日
    浏览(51)
  • 【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

    ElasticSearch 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 HTTP 请求发送给 ES 服务器。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html。 在本文中,我们将着重介绍 ElasticSearch Java 客户端中的 RestClient,并演示如何

    2024年02月08日
    浏览(40)
  • 使用 Elasticsearch 轻松进行中文文本分类

    本文记录下使用 Elasticsearch 进行文本分类,当我第一次偶然发现 Elasticsearch 时,就被它的易用性、速度和配置选项所吸引。每次使用 Elasticsearch,我都能找到一种更为简单的方法来解决我一贯通过传统的自然语言处理 (NLP) 工具和技术来解决的问题。 在某个时刻,我意识到,它

    2024年02月12日
    浏览(36)
  • Elasticsearch_分词器、搜索文档以及原生JAVA操作

    ES文档的数据拆分成一个个有完整含义的,并将与文档对应,这样就可以通过查询文档。要想正确的分词,需要选择合适的分词器。 standard analyzer:Elasticsearch的默认分词器,根据空格和标点符号对应英文进行分词,会进行单词的大小写转换。 默认分词器是

    2024年02月03日
    浏览(35)
  • java操作 elasticsearch8.0 doc文档<二>

    如何连接请看上一篇文章 https://blog.csdn.net/u013979493/article/details/123122242?spm=1001.2014.3001.5502 本文所有方法本人以测试正常使用,如有错误请指正,一起讨论 以下为本文所有代码 制作不易,请尊重作者的劳动成果

    2023年04月11日
    浏览(30)
  • Elasticsearch使用篇 - 更新文档

    注意:实际使用 murmurhash 算法 注意:更新任何一个字段都是全部删除。并发更新操作之间无事务隔离保证,会产生数据错位问题。 1、覆盖式更新,由客户端完成所有数据的组装,服务端认可数据的完整性,执行覆盖。 2、数据更新一次,内部会先删除,再插入。 3、数据总条

    2024年02月03日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包