ES配置与使用

news2024/11/15 15:25:45

一、单机版安装

地址: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);

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TryHackMe-Jack(boot2root)

Jack 破坏运行Wordpress的Web服务器&#xff0c;获得低特权用户&#xff0c;并使用Python模块将您的权限升级到root。 端口扫描 循例nmap web枚举 robots.txt wpscan枚举user wpscan直接爆 得到wendy的密码 直接登后台 根据题目提示&#xff0c;利用user role editor帮助我们…

使用chatgpt写一个划词翻译的浏览器插件

最近在网上流行的chatgpt&#xff0c;实在是太火了&#xff0c;好多人在使用&#xff0c;而且它的用处实在是太丰富了&#xff0c;能帮助我们解决很多问题&#xff0c;就比如说&#xff1a;编程&#xff0c;生成图片&#xff0c;翻译等。太丰富了。我看网上很多人都在说&#x…

江苏三年制专转本本法学类考纲配套课程及复习资料

法学类专业课内容比较多&#xff0c;需要背的也很多&#xff0c;今天我来给大家看一下我们应该如何学习法学类&#xff1f;01&#xff1a;考试科目考试科目&#xff1a;大学语文专业课基础理论考试课程A &#xff1a;法理学约 15%课程B&#xff1a;宪法学 约 15%课程C &#xf…

第九讲 常用数据结构之列表-2

列表的方法 列表类型的变量拥有很多方法可以帮助我们操作一个列表&#xff0c;假设我们有名为foos的列表&#xff0c;列表有名为bar的方法&#xff0c;那么使用列表方法的语法是&#xff1a;foos.bar()&#xff0c;这是一种通过对象引用调用对象方法的语法。后面我们讲面向对象…

接口自动化【三】(接口依赖之上传图片;Template 模块用法)

前言 一、后台上传图片接口 二、用postman来做这种有依赖的接口 三、使用 Template 模块进行字符串的替换 四、使用 Template 模块进行字符串的替换&#xff08;针对于Excel表格中的数据&#xff09; 总结 前言 本章中&#xff0c;对接口的依赖做了阐述&#xff0c;后台上…

怎么用Elai智能数字人来直播带货?

随着直播带货的火爆&#xff0c;越来越多的商家和品牌想要借助这一新兴的营销方式来提升销量和品牌影响力。但是&#xff0c;直播带货也面临着一些挑战&#xff0c;比如真人主播的成本高、稳定性差、风险大等。那么&#xff0c;有没有一种更好的解决方案呢&#xff1f;Elai智能…

leetcode重点题目分类别记录(三)动态规划深入

文章目录 动态规划背包问题01背包抽象出求解目标尝试进程子问题拆分基本情况根据拆分过程定义dp数组与转移方程遍历顺序与状态压缩模板归纳题目应用变种提升组合问题多维01背包有特殊限制的01背包 完全背包尝试进行子问题拆分转移方程题目应用变种提升-求组合/排列数 打家劫舍变…

【案例教程】CMIP6数据处理方法与典型案例分析实践技术

气候变化关系到农业、生态系统、社会经济和人类生存与发展&#xff0c;是当今世界关注的重点问题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff09;第6次评估报告指出&#xff0c;自 20 世纪 50 年代以来&#xff0c;从全球平均气温和海温升高、大…

LightGBM^v^

LightGBM LightGBM&#xff08;Light Gradient Boosting Machine&#xff09;是一个基于梯度提升决策树&#xff08;GBDT&#xff09;的高效机器学习框架。它是由微软公司开发的&#xff0c;旨在提供更快、更高效的训练和预测性能。LightGBM在许多数据科学竞赛中都表现出色&am…

什么品牌的蓝牙耳机通话音质最好?通话音质好的蓝牙耳机

使用蓝牙耳机&#xff0c;无需取下耳机即可接听电话&#xff0c;来电时只需按一个按钮即可开始讲话&#xff0c;可以说是十分方便&#xff0c;为了帮助您找到可以帮助您拨打和接听电话的耳机&#xff0c;我们收集了适合通话的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 动圈单元…

亚马逊巴西站对中国商家正式开放试运营,如何快速提升销量

近日&#xff0c;亚马逊全球开店宣布&#xff0c;亚马逊巴西站对中国商家正式开放试运营&#xff0c;在亚马逊巴西站试运营期间&#xff0c;亚马逊卖家是能获得很多扶持的&#xff0c;比如说大量额外引流资源支持&#xff0c;营销方面&#xff0c;巴西卖家是可以使用优惠券&…

Three.js教程:透视投影相机

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链。 其他系列工具&#xff1a;NSDT简石数字孪生 Threejs如果想把三维场景Scene渲染到web网页上&#xff0c;还需要定义一个虚拟相机Camera&#xff0c;就像你生活中想获得一张照片&#xff0c;需要一台用来拍照的相机。 透视…

恶意软件及反病毒的一些知识

目录标题 什么是恶意软件&#xff1f;恶意软件的特征恶意软件可以分为几类&#xff1f;按照传播方式分类按照功能分类 恶意软件的免杀技术有哪些&#xff1f;文件免杀内存免杀行为免杀 反病毒技术有哪些&#xff1f;单击反病毒网关反病毒 反病毒网关的工作原理反病毒网关的工作…

OpenText Exceed TurboX (ETX) 安全功能介绍

OpenText Exceed TurboX (ETX) 安全功能介绍 将所有重要的知识产权&#xff08;IP &#xff09;相关数据保存在受良好保护的中央数据中心是保护 IP 的最佳做法。安全的远程访问是保护知识产权的关键。 所有数据流量均采用最新标准加密技术进行加密ETX 整合多种身份验证系统ET…

【代码随想录】刷题Day3

1.链表删除 203. 移除链表元素 循环删除 class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr)return head;ListNode* prevnullptr;ListNode* curhead;while(cur){if(prevnullptr&&cur->valval){ListNode* tmp cur;curcu…

对项目总体把控不足,项目经理应该怎么办?

公司现状&#xff1a;项目人员紧缺&#xff0c;只有两人了解此项目技术细节&#xff0c;其中一个不常驻现场&#xff0c;另一个是执行项目经理李伟。 项目经理王博是公司元老&#xff0c;同时负责多个项目&#xff0c;工作比较忙&#xff0c;不常驻现场&#xff0c;没有参加过…

【Web服务】HTTP和DNS重要知识

304状态码 HTTP状态码中的304状态码表示"未修改"&#xff0c;通常在客户端发起了一个带有If-Modified-Since头部的GET请求时会得到这个响应。服务器通过比较If-Modified-Since头部指定的时间戳和资源的最后修改时间来判断资源是否被修改过&#xff0c;如果没有修改则…

Vue(十七):利用 html2canvas、JsPDF 依赖实现打印功能

效果 主程序 <!-- 打印区域 --> <el-container ref"PdfPage"><!-- 过滤打印按钮 --><el-button type"primary" data-html2canvas-ignoretrue click"printPage">打印</el-button><el-main><!-- 滚动区域…

AI绘画——Three Delicacy Wonton (三餡馄饨Mix)模型

目录 怎么做三鲜馄饨Mix&#xff1a; 描述&#xff1a; 版本&#xff1a; 使用说明&#xff1a; 实操演示&#xff08;多图预警&#xff09; Picture One Picture Two Picture Three 怎么做三鲜馄饨Mix&#xff1a; 切一点金弘道 &#xff08;https://civitai.com/mo…

无人机遥感影像应用

目录 一、无人机遥感技术 二、无人机遥感影像数据生产 三、无人机遥感影像应用 一、无人机遥感技术 1.无人机遥感系统组成 1.1无人机遥感系统组成—无人机平台 1.2无人机遥感系统组成—传感器 2.无人机遥感技术的特点 高时效性&#xff1a;准确并快速获取地表数据 高分辨率…