ES配置与使用

2023-10-29

一、单机版安装

地址:www.elastic.co

下载tar格式,或者复制链接,wget + url下载

启动:

./bin/elasticsearch

二、插件

解决页面问题,GitHub下载:elasticsearch-head

需要node环境。node -v检查node版本,需要大于6.0.0

安装:进入目录,npm install

启动:npm run start,在9100端口启动 

head和es存在跨域问题,在es配置文件加配置

#允许跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

三、分布式安装

其中一个设置为master,修改配置文件config/elasticsearch.yml

在最后加上如下配置:

集群配置,master和子节点的配置:

#集群设置
#集群名
cluster.name: wali 
#节点名
node.name: master
#指定为master
node.master: true
#绑定IP,本地127.0.0.1
network.host: 127.0.0.1


#子节点配置
#集群名
cluster.name: wali
#本节点名
node.name: slave1
network.host: 127.0.0.1
http.port: 9201
#找到master
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

四 、基础概念

1、索引 含有相同属性的文档集合

2、类型 所以可以定义一个或多个类型,文档必须鼠疫一个类型

3、文档 文档是可以被索引的及基本数据单位

4、分片 每个索引都有多个分片,每个分片是一个Lucene索引

5、备份 拷贝一份分片就完成了分片的备份

RESTFul API

1、api基本格式:http://<ip>:<port>/<索引>/<类型>/<文档id>

2、常用的HTTP动词 GET/PUT/POST/DELET

索引信息中,mappings为空是非结构化

1、创建索引

创建一个people,put方式

http://192.168.152.128:9200/people

参数:

{
    "settings": {
        "number_of_shards":3,
        "number_of_replicas":1
    },
    "mappings":{
        "man":{
            "properties":{
                "name":{
                    "type":"text"
                },
                "contry":{
                    "type":"keyword"
                },
                "age":{
                    "type":"integer"
                },
                "date":{
                    "type":"date",
                    "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        },
        "woman":{
            
        }
    }
}

2、 插入数据:

指定id,用put,不指定id用post,会自动生成

 3、修改

直接修改:http://192.168.152.128:9200/people/man/1/_update

{

    "doc":{

        "name":"谁是瓦力"

    }

}

脚本修改:

{

    "script":{

        "lang":"painless",

        "inline":"ctx._source.age += 1"

    }

}

或者:

{

    "script":{

        "lang":"painless",

        "inline":"ctx._source.age =params.age",

        "params":{

                 "age":100

         }

    }

}

4、删除

删除文档,delete方法:http://192.168.152.128:9200/people/man/1/

删除索引,页面删除:动作-删除;

delete方法:http://192.168.152.128:9200/people

5、查询

根据id查询,get方法:http://192.168.152.128:9200/book/novel/1

http://192.168.152.128:9200/book/_search

match_all:查询所有,from:页数,size:每页条数

{
    "query":{
        "match_all":{}
    },
    "from":1,
    "size":2
}

条件查询,排序:

{
    "query":{
        "match":{
            "title":"ElasticSearch"
        }
    },
    "sort":[
            {"publish_date":{"order":"desc"}}
        ]
}

{
    "aggs":{
        "group_by_word_count":{
            "terms":{
                "field":"word_count"
            }
        },
        "group_by_publish_date":{
            "terms":{
                "field":"publish_date"
            }
        }
    }
}

stats:统计,min:最小,max:最大

{
    "aggs":{
        "grades_word_count":{
            "stats":{
                "field":"word_count"
            }
        }
    }
}

四、项目简单使用

1、配置

pom文件

<dependency>
       <groupId>org.elasticsearch.client</groupId>
       <artifactId>transport</artifactId>
       <version>${elasticsearch.version}</version>
</dependency>

 配置文件

#ES配置
elasticsearch:
  hosts: 192.168.152.128
  clusterName: wali
  invoice.count: 5

 配置类

package com.example.esdemo.config;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;

/**
 * ES配置
 *
 * @author zhanglei
 * @date 2022-01-17
 */
@Configuration
public class ElasticSearchConfig {
    @Value("${elasticsearch.hosts}")
    private String hosts;

    @Value("${elasticsearch.clusterName}")
    private String clusterName;

    @Bean
    public TransportClient getTransportClient() {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        try {
            Settings settings = Settings.builder().
                    put("client.transport.sniff", true)
                    .put("cluster.name", clusterName).
                            build();

            TransportClient client = new PreBuiltTransportClient(settings);
            //分号
            String[] addressArray = hosts.split(";");

            if (addressArray == null) {
                throw new Exception("ES服務配置异常");
            }
            for (String address : addressArray) {
                //冒号
                String[] addressParts = address.split(":");
                String host = address;
                int port = 9300;
                if (addressParts.length == 2) {
                    host = addressParts[0];
                    port = Integer.parseInt(addressParts[1]);
                }

                client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
            }

            return client;
        } catch (Exception e) {
            System.out.println("ES服務配置异常");
            System.exit(1);
            return null;
        }
    }
}

2、代码使用

@Autowired
    private TransportClient client;

    public static final String INDEX = "people";

    public static final String TYPE = "man";


@PostMapping("/man/query")
    @ApiOperation(httpMethod = "POST", value = "查询")
    public ResponseEntity add(@RequestParam(name = "name", required = false) String name,
                              @RequestParam(name = "gtAge", required = false) Integer gtAge,
                              @RequestParam(name = "ltAge", required = false) Integer ltAge,
                              @RequestParam(name = "country", required = false) String country,
                              @RequestParam(name = "countryQueryType", defaultValue = "1") Integer countryQueryType,
                              @RequestParam(name = "date", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") String date,
                              @RequestParam(name = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                              @RequestParam(name = "pageSize", required = false, defaultValue = "3") Integer pageSize) {

        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        if (name != null) {
            boolQuery.must(QueryBuilders.matchQuery("name", name));
        }
        //范围查询
        if (gtAge != null || ltAge != null) {
            RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
            if (gtAge != null && gtAge > 0) {
                rangeQuery.from(gtAge);
            }
            if (ltAge != null && ltAge > 0) {
                rangeQuery.to(ltAge);
            }
            boolQuery.filter(rangeQuery);
        }

        if (country != null) {
            if (countryQueryType == 1) {
                //精确查询
                boolQuery.must(QueryBuilders.termQuery("country.keyword", country));
            } else {
                //模糊查询,(有一个分词能匹配也会返回,根据匹配度)
                boolQuery.must(QueryBuilders.matchQuery("country", country));
            }
        }

        SearchRequestBuilder builder = this.client.prepareSearch(INDEX)
                .setTypes(TYPE)
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(boolQuery)
                .setFrom(pageNum)
                .setSize(pageSize);

        System.out.println(builder);

        SearchResponse response = builder.get();
        ArrayList<Map<String, Object>> result = new ArrayList<>();
        for (SearchHit hit : response.getHits()) {
            result.add(hit.getSourceAsMap());
        }

        return new ResponseEntity(result, HttpStatus.OK);

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES配置与使用 的相关文章

随机推荐

  • 微信小程序页面事件 - 下拉刷新与上拉触底

    一 下拉刷新 1 概念 下拉刷新是移动端的专有名词 指的是通过手指在屏幕上的下拉滑动操作 从而重新加载页面数据的行为 2 启用下拉刷新 启用下拉刷新有两种方式 全局开启下拉刷新 在 app json 的 window 节点中 将 enabl
  • 李航《统计学习方法》——第七章 支持向量机

    由于网上资料很多 这里就不再对算法原理进行推导 仅给出博主用Python实现的代码 供大家参考 适用问题 二类分类 实验数据 二分类的数据 train binary csv SVM有三种模型 由简至繁为 当训练数据训练可分时 通过硬间隔最大
  • 【UE4从零开始 021】控件类型介绍

    1 Common 选项 说明 边框 Border 边框是容器控件 可以包含一个子控件 提供使用边框图像和可调节的填补将其包围起来的机会 按钮 Button 按钮是单子项 可点击的Primitive控件 它可实现基本交互 你可将任何其他控件放
  • 网友最想问Chatgpt的问题,我都整理在这里了

    前言 我整理了几个网友最想问chatgpt的问题 帮助那些还没用上chatgpt的网友们 首先申明本人使用chatgpt仅作为技术探讨 学习交流用途 没有任何不良导向 考虑到英文阅读的难度 我就直接问中文了 问题内容 1 如何成为百万富翁
  • 2021年CCPC河南省赛部分题解

    文章目录 2825 收集金币 状态机dp 2826 使用技能 乘法逆元 组合数学 2827 欢度佳节 位运算 枚举 2829 闯关游戏 DP 2834 小凯的书架 树状数组 二分 2835 未成年人之友 模拟 2836 黑曜石 思维 282
  • vs工程 vcproj和开发环境定义宏---$(IntDir)和$(OutDir)

    一 vs 基础配置文件解析 vcproj是工程文件 sln是解决方案文件 一个解决方案里面可以包含多个工程 你打开vcproj文件编译不了可能是因为这个工程里面用到了同一个解决方案中其它工程的东西 visual Studio NET采用两种
  • 解决network-manager中wired为unmanaged的问题

    我的Debian 7 1安装好时没有network manager 便下载安装了一个 但安装完后wired总显示为unmanaged 解决方法如下 打开 etc NetworkManager NetworkManager conf 将man
  • Android 属性动画(Property Animation) 完全解析 (上)

    转载请标明出处 http blog csdn net lmj623565791 article details 38067475 1 概述 Android提供了几种动画类型 View Animation Drawable Animation
  • matlab 转换为正整数_【MATLAB】专题1笔记 MATLAB基础知识

    视频课程参考 https www bilibili com video BV19J411W7Ta 数值问题 gt 求解算法 gt 程序实现 gt 结果分析 MATLAB 功能 数值计算 符号计算 图形绘制 程序流程绘制 工具箱 数值计算方法
  • 什么是哈希函数

    Hash函数译为哈希函数 又称散列函数 是把任意长度的输入 通过散列算法 变换成固定长度的输出 该输出的值称为散列值或消息摘要 简单来说就是一种将任意长度的输入消息压缩成某一固定长度的消息摘要的函数 它具备以下的性质 哈希函数所必须的性质
  • 《数据结构》_PTA_数据结构作业5:树和二叉树

    判断题 1 1 某二叉树的前序和中序遍历序列正好一样 则该二叉树中的任何结点一定都无右孩子 F 1 2 存在一棵总共有2016个结点的二叉树 其中有16个结点只有一个孩子 F 1 3 哈夫曼树中一定没有度为 1 的结点 T 1 4 一棵非空
  • jdk1.8接口

    在1 8版本之前 接口中的常量必须复制 且接口中的方法都是抽象方法 public interface Bird int a 这里会报错 因为常量必须赋值才行 int b 10 void shout1 这里报错 因为抽象方法没有方法体 voi
  • KMP算法最浅显理解

    角色 甲 abbaabbaaba 乙 abbaaba 乙对甲说 帮忙找一下我在你的哪个位置 甲从头开始与乙一一比较 发现第 7 个字符不匹配 要是在往常 甲会回退到自己的第 2 个字符 乙则回退到自己的开头 然后两人开始重新比较 这样的事情
  • 加密世界的价值捕获:谁是超级捕获者?

    来源 蓝狐笔记 麦田的收获者 梵高 加密世界还很早期 整个行业都还处于构建的初级阶段 在这种情况下 有哪些赛道正在捕获价值 捕获价值的量级有多大 蓝狐笔记简要梳理一下加密行业的整体价值捕获情况 从中窥见加密行业不同赛道的价值捕获现状 尤其是
  • Gradle史上最详细解析

    转自 http www cnblogs com wxishang1991 p 5532006 html 前言 对于Android工程师来说编译 打包等问题立即就成痛点了 一个APP有多个版本 Release版 Debug版 Test版 甚至
  • 计算机提示xinput1_4.dll丢失的解决方法,哪种更值得推荐

    最近我在使用某个游戏时遇到了一个问题 就是出现了xinput1 4 dll文件缺失的错误 这个错误让我无法正常启动游戏 让我感到非常困扰和沮丧 经过一番努力 我终于成功修复了这个问题 也总结了一些解决方法 大家可以对比一下哪种更值得推荐 x
  • react 属性验证与默认属性

    类组件属性验证与默认属性 通过static定义类的属性 属性验证可以引入模板自带的prop types来进行类型判断 当然你也可以自己写一个类型判断的方法 然后对类的propTypes属性进行类型编写 propTypes 这个属性名不可自定
  • 【AWS实验】 使用 Lake Formation 设置数据湖

    文章目录 实验概览 目标 实验环境 任务 1 探索实验环境 任务 1 1 在 S3 存储桶中创建文件夹 任务 1 2 加载 AWS Cloud9 IDE 任务 1 3 将数据复制到 S3 存储桶 任务 2 设置 AWS Lake Forma
  • jq的ajax里面的datagrid,详解jquery easyui之datagrid使用参考

    本文介绍了jquery easyui之datagrid使用 具体如下 创建datagrid 在页面上添加一个div或table标签 然后用jquery获取这个标签 并初始化一个datagrid 代码如下 页面上的div标签 js代码 mag
  • ES配置与使用

    一 单机版安装 地址 www elastic co 下载tar格式 或者复制链接 wget url下载 启动 bin elasticsearch 二 插件 解决页面问题 GitHub下载 elasticsearch head 需要node环