Elasticsearch、Kibana以及Java操作ES 的快速使用

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

docker 安装elastic search 、 kibana(可视化管理elastic search)

docker pull elasticsearch:7.12.1
docker pull kibana:7.12.1

 

创建docker自定义网络

docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。
一定要配置自定义网络,并将两个容器同时加到网络中,否则下面的http://es:9200会无法访问到es

docker network create es-net

 

启动elastic search、kibana容器

启动elastic search容器
docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

访问 http://192.168.137.139:9200 (注意换成自己服务器的ip地址)
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

启动kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

访问 http://192.168.137.139:5601 (注意换成自己服务器的ip地址)
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
 

给es安装 ik分词器

默认的分词器对中文并不友好,ik分词器可以更好的支持中文分词
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.12.1
(官方有其他的下载方式,可以参考:https://github.com/medcl/elasticsearch-analysis-ik)
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

 查看es-plugins的挂载卷所在目录
docker volume inspect es-plugins

得到 /var/lib/docker/volumes/es-plugins/_data

将下载的文件解压缩并传到服务器挂在卷中
scp -r ik myserver:/var/lib/docker/volumes/es-plugins/_data

Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

重启es服务
docker restart es

ocker logs es | grep ik	# 查看ik分词器是否成功加载

Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
使用Dev Tools测试
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

IK分词器包含两种模式:(根据业务选择)

  • ik_smart:最少切分

  • ik_max_word:最细切分

扩展ik分词器的词典

Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
奥里给并没有组成一个词

cd /var/lib/docker/volumes/es-plugins/_data/ik/config/

oligei.dic文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
    <entry key="ext_dict">my_dict.dic</entry>

	<!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
    <entry key="ext_stopwords">my_stopwords.dic</entry>

	<!--用户可以在这里配置远程扩展字典 -->
    <!-- <entry key="remote_ext_dict">words_location</entry> -->

	<!--用户可以在这里配置远程扩展停止词字典-->
    <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
重启es 和 kibana
docker restart es
docker restart kibana

ocker logs es | grep my_ # 查看日志是否加载了配置

Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

 


 

es 索引库操作

创建索引库

PUT /user 
{
  "mappings": {
    "properties": {
      "info": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email": {
        "type": "keyword",
        "index": "false"
      },
      "name": {
        "type": "object",
        "properties": {
          "fistName": {
            "type": "keyword"
          },
          "lastName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

删除索引库

DELETE /user

修改索引库

索引库不支持修改已有的属性,但可以增加属性

PUT /user/_mapping
{
  "properties": {
    "age": {
      "type": "integer"
    }
  }
}

查询索引库

GET /user

 


 

es 文档操作

新增文档

POST /user/_doc/1
{
  "info": "学习使我快乐",
  "email": "xxx@qq.com",
  "age": "18",
  "name": {
    "firstName": "code",
    "lastName": "horse"
  }
}

删除文档

DELETE /user/_doc/1

修改文档

全量修改:先删除,后新建(如果没有,也会新建)

PUT /user/_doc/1
{
  "info": "学习使我快乐222222222222222",
  "email": "xxx@qq.com",
  "age": "18",
  "name": {
    "firstName": "code",
    "lastName": "horse"
  }
}

增量修改:只修改指定字段的值

POST /user/_update/1
{
  "doc": {
    "info": "学习使我快乐333333333333"
  }
}

查询文档

GET /user/_doc/1

 


 

Java使用ES (RestAPI)

官方使用文档:https://www.elastic.co/guide/en/elasticsearch/client/index.html
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
本教程使用的是 Migrating from the High Level Rest Client

导入依赖

pom.xml


<!--FastJson  官方需要的other dependencies-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.71</version>
</dependency>

springboot依赖管理有可能会给你导入的依赖版本会给覆盖掉
Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana
解决方案:覆盖springboot的版本

<properties>
    <elasticsearch.version>7.12.1</elasticsearch.version>
</properties>

Elasticsearch、Kibana以及Java操作ES 的快速使用,微服务,elasticsearch,java,kibana

操作索引库

IndexDatabaseTest.java
public class IndexDatabaseTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void setUp() {  // 创建es连接
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.137.139:9200")
        ));
    }

    @Test
    public void clientStatus() {    // 查看是否连接成功
        System.out.println(client);
    }

    // 创建索引库
    @Test
    public void createIndexDataBase() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("user");
        String createIndexDataBaseDSL = "{\n" +
                "  \"mappings\": {\n" +
                "    \"properties\": {\n" +
                "      \"info\": {\n" +
                "        \"type\": \"text\",\n" +
                "        \"analyzer\": \"ik_smart\"\n" +
                "      },\n" +
                "      \"email\": {\n" +
                "        \"type\": \"keyword\",\n" +
                "        \"index\": \"false\"\n" +
                "      },\n" +
                "      \"name\": {\n" +
                "        \"type\": \"object\",\n" +
                "        \"properties\": {\n" +
                "          \"fistName\": {\n" +
                "            \"type\": \"keyword\"\n" +
                "          },\n" +
                "          \"lastName\": {\n" +
                "            \"type\": \"keyword\"\n" +
                "          }\n" +
                "        }\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}";
        request.source(createIndexDataBaseDSL, XContentType.JSON);
        client.indices().create(request, RequestOptions.DEFAULT);
    }

    // 删除索引库
    @Test
    public void deleteIndexDataBase() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("user");
        client.indices().delete(request, RequestOptions.DEFAULT);
    }

    // 修改索引库(只支持增加mapping)
    @Test
    public void updateIndexDataBase() throws IOException {
        PutMappingRequest request = new PutMappingRequest("user");
        request.source("{\n" +
                "  \"properties\": {\n" +
                "    \"age\": {\n" +
                "      \"type\": \"integer\"\n" +
                "    }\n" +
                "  }\n" +
                "}\n", XContentType.JSON);
        client.indices().putMapping(request, RequestOptions.DEFAULT);
    }

    // 查找索引库
    @Test
    public void getIndexDataBase() throws IOException {
        GetIndexRequest request = new GetIndexRequest("user");
        GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT);

        Map<String, MappingMetadata> mappings = getIndexResponse.getMappings();
        System.out.println(mappings.get("user").sourceAsMap().values());
    }


    @AfterEach
    public void unMount() throws IOException { 	// 断开es连接
        this.client.close();
    }

}

 文章来源地址https://www.toymoban.com/news/detail-697487.html

操作文档

DocTest.java
public class DocTest {
    private RestHighLevelClient client;

    @BeforeEach
    void setUp() {  // 创建es连接
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.137.139:9200")
        ));
    }

    @Test
    public void clientStatus() {    // 查看是否连接成功
        System.out.println(client);
    }

    // 创建文档
    @Test
    public void createIndexDataBase() throws IOException {
        IndexRequest request = new IndexRequest("user").id("1");
        String createDocDSL = "{\n" +
                "  \"info\": \"学习使我快乐\",\n" +
                "  \"email\": \"xxx@qq.com\",\n" +
                "  \"name\": {\n" +
                "    \"firstName\": \"code\",\n" +
                "    \"lastName\": \"horse\"\n" +
                "  }\n" +
                "}";
        request.source(createDocDSL,XContentType.JSON);
        client.index(request, RequestOptions.DEFAULT);
    }

    // 删除文档
    @Test
    public void deleteIndexDataBase() throws IOException {
        DeleteRequest request = new DeleteRequest("user", "1");
        client.delete(request, RequestOptions.DEFAULT);
    }

    // 修改文档 (API实现的是全量修改)
    @Test
    public void updateIndexDataBase() throws IOException {
        UpdateRequest request = new UpdateRequest("user", "1");
        request.doc("{\n" +
                "    \"info\": \"学习使我痛苦!!!!!!!\"\n" +
                "  }", XContentType.JSON);
        client.update(request, RequestOptions.DEFAULT);
    }

    // 查找文档
    @Test
    public void getIndexDataBase() throws IOException {
        GetRequest request = new GetRequest("user", "1");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);

        String json = response.getSourceAsString();
        System.out.println(json);
    }

    @Test
    private Map<String, Object> getData(String text) {
        Map<String, Object> map = new HashMap<>();
        map.put("info", text);
        map.put("email", text + "@qq.com");
        Map<String, String> name = new HashMap<>();
        name.put("firstName", text);
        name.put("lastName", text);
        map.put("name", name);
        System.out.println(JSON.toJSONString(map));
        return map;
    }

    // 批量导入文档
    @Test
    public void testBulk() throws IOException {
        BulkRequest request = new BulkRequest();
        for (int i = 1; i <= 200; i ++ ) {
            String text = String.valueOf(i);
            Map<String, Object> data = getData(text);
            request.add(new IndexRequest("user")
                    .id(text)
                    .source(JSON.toJSONString(data), XContentType.JSON)
            );
        }
        client.bulk(request, RequestOptions.DEFAULT);
    }

    @AfterEach
    public void unMount() throws IOException { // 断开es连接
        this.client.close();
    }
}

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

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

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

相关文章

  • Docker安装ElasticSearch、Kibana、IK分词器以及设置ES账户密码

    Docker安装ElasticSearch、Kibana、IK分词器以及设置ES账户密码

    版本声明: 系统 :CentOS 7.9(云服务器) ES版本 :7.6.1 Kibana :7.6.1 Ik分析器版本 :7.6.1 1、拉取镜像 2、创建挂载目录 设置所有用户读写执行权限 : sudo chmod -R 777 /docker_config/elasticsearch/ 3、创建elasticsearch.yml 配置文件 4、创建容器 参数说明 : -p 端口映射 -e discovery.type=single

    2023年04月09日
    浏览(15)
  • elasticsearch 7.9.3知识归纳整理(六)之 kibana图形化操作es指南

    elasticsearch 7.9.3知识归纳整理(六)之 kibana图形化操作es指南

    一、创建用户,角色和权限指引 1.创建角色 1.1 在kibana首页点击Manage and Administer the Elastic Stack下的securitys settings 1.2 点击左侧Security 下的roles 1.3 点击右上角的create role 1.4 输入角色名字 完成后点击下面的create role 1.5 创建好角色后,找到角色,点击 角色名 就会进入给角色授权界

    2024年02月08日
    浏览(7)
  • ES检索结果高亮显示JAVA以及Kibana实现

    ES检索结果高亮显示JAVA以及Kibana实现

    对比做了高亮前后的结果返回: 高亮前: 高亮后: 可以看到加入高亮的代码之后返回的json串命中的被套了一层em style=‘color: red’xxx/em标签,也就是我们前置设置的preTags与postTags; 当然hightlight本身支持多个字段高亮,java代码实现只要设置多个     后续查询出结果之

    2024年02月11日
    浏览(7)
  • ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入

    ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入

    导航: 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 黑马旅游源码:  https://wwmg.lanzouk.com/ikjTE135ybje 目录 1.初识弹性搜索elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK弹性栈 1.1.3.elasticsearch和lucene 1.1.4.搜索引擎技术

    2024年02月01日
    浏览(23)
  • Centos7快速安装Kibana并连接ES使用

    Centos7快速安装Kibana并连接ES使用

    Elasticsearch 提供了一个名为 Kibana 的官方可视化界面。Kibana 是一个开源的数据可视化和管理工具,用于 Elasticsearch。它提供了丰富的功能,如仪表板、图表、地图等,帮助您更好地理解、搜索和可视化存储在 Elasticsearch 中的数据。 创建 Kibana 的存储库文件 /etc/yum.repos.d/kibana.r

    2024年02月05日
    浏览(10)
  • ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

    ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    浏览(8)
  • ElasticSearch6.x版本概念介绍以及在Kibana上增删改查的操作

    ElasticSearch6.x版本概念介绍以及在Kibana上增删改查的操作

    教学讲解视频地址:视频地址 1.接近实时(NRT Near Real Time ) Elasticsearch是一个 接近实时 的搜索平台。这意味着, 从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内) 2.索引(index) 一个索引就是一个拥有几分相似特征的文档的集合 。比如说,你可以有一个

    2023年04月24日
    浏览(8)
  • ELK(Elasticsearch、Kibana、Logstash)以及向ES导入mysql数据库数据或CSV文件数据,创建索引和可视化数据

    ELK(Elasticsearch、Kibana、Logstash)以及向ES导入mysql数据库数据或CSV文件数据,创建索引和可视化数据

    地址:Past Releases of Elastic Stack Software | Elastic 在Products和version处分别选择需要下载的产品和版本,E(elasticsearch)L(logstash)K(kibana)三者版本必须相同 将下载好的elk分别解压到相同路径下 本文中elasticsearch=E=ES=es;L=logstash;K=kibana 一般情况下使用默认配置即可,下面对我的

    2024年02月15日
    浏览(34)
  • Docker 搭建 ElasticSearch、Kibana 以及基础使用

    Docker 搭建 ElasticSearch、Kibana 以及基础使用

    Elasticsearch: 权威指南 | Elastic 拉取ES以及Kibana镜像: ES部分搭建: 创建目录、配置文件、其他配置以及启动 1、目录部分: 2、端口部分: 3、配置文件创建 4、其他注意事项 5、启动容器 访问http://宿主机IP:9200/_cat/nodes?pretty 节点名称带表示为主节点*,这里作示范仅启动2个容器

    2024年02月04日
    浏览(9)
  • docker部署elasticsearch:8.6.2, kibana,logstash 版本以及kibana的使用

    docker部署elasticsearch:8.6.2, kibana,logstash 版本以及kibana的使用

    How to Run Elasticsearch 8 on Docker for Local Development Docker下elasticsearch8部署、扩容、基本操作实战(含kibana) 导入es数据 docker安装elasticsearch和head插件 docker安装elasticsearch和head插件,连接失败问题解决 需要输入token 生成token报错 ERROR: [xpack.security.enrollment.enabled] must be set to true to create an

    2024年02月16日
    浏览(17)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包