Elasticsearch

  • 1 Elasticsearch是什么?
  • 2 Elasticsearch安装与配置
    • 2.1 Ubuntu操作系统安装
    • 2.2 ES配置
  • 3 ES Restful API基本使用
    • 3.1 Mapping
    • 3.2 REST API
      • 3.2.1 集群信息
      • 3.2.2 集群中的节点信息
      • 3.2.3 集群中的索引信息
      • 3.2.4 创建索引
      • 3.2.5 删除索引
      • 3.2.6 创建索引的mapping
      • 3.2.7 删除索引的mapping
      • 3.2.9 查看索引的mapping
      • 3.2.10 新增文档
      • 3.2.11 更新文档
      • 3.2.12 删除文档
      • 3.2.13 查看文档
    • 3.3 REST API文档结构

1 Elasticsearch是什么?

是一个基于Apache Lucene™的开源搜索引擎

  • 接近实时(NRT)
  • 集群(cluster)
  • 节点(node) - 集群中的一个服务器
  • 索引(index) - 类似redis里的database
  • 类型(type) - 在一个索引中具体分类
  • 文档(document) - 物理上存在索引中,类赋予一个类型
  • 分片和复制(shards & replicas) - j将索引划分成多份,为了防止分片故障,可以复制分片。默认5个主分片、5个复制分片

2 Elasticsearch安装与配置

前置条件: JDK版本不能低于1.7_55

2.1 Ubuntu操作系统安装

  1. 下载TAR.GZ格式的1.5.0版本的安装包
  2. 解压缩,成功后完成安装
    tar –vxf elasticsearch-1.5.0.tar.gz
  3. 运行(前台启动)
cd /home/elasticsearch/elasticsearch-1.5.0/bin/chmod +x * ./elasticsearch

补充

  • 后台启动(三种方法)
    ./elasticsearch –d #在后台运行Elasticsearch
    ./elasticsearch -d -Xmx2g -Xms2g #后台启动,启动时指定内存大小(2G)
    ./elasticsearch -d -Des.logger.level=DEBUG #可以在日志中打印出更加详细的信息。
  • 如果和本地jdk不兼容报错,改成elasticsearch-7.6.1就可以了
warning: ignoring JAVA_HOME=C:\Java\jdk1.8.0_191; using bundled JDK
  1. 验证
    请求http://127.0.0.1:9200,如果有返回则说明安装成功
{"status" : 200,"name" : "Captain Zero","cluster_name" : "elasticsearch","version" : {"number" : "1.5.0","build_hash" : "544816042d40151d3ce4ba4f95399d7860dc2e92","build_timestamp" : "2015-03-23T14:30:58Z","build_snapshot" : false,"lucene_version" : "4.10.4"},"tagline" : "You Know, for Search"
}

2.2 ES配置

配置文件所在的目录路径如下:$ES_HOME/config/elasticsearch.yml

配置项含义

参数 含义
cluster.name: elasticsearch elasticsearch的集群名称,默认是elasticsearch。生成环境时建议更改。
node.name: “Franz Kafka” 节点名,默认随机指定,位置elasticsearch的jar包中config/name.txt
node.master: true 是否有资格被选举成为node,默认是true
node.data: true 是否存储索引数据,默认为true。如果节点配置node.master:false并且node.data: false,则该节点将起到负载均衡的作用
index.number_of_shards: 5 默认索引分片个数,默认为5片
index.number_of_replicas: 默认索引副本个数,默认为1个副本
path.conf: /path/to/conf 配置文件的存储路径
path.data:/path/to/data1,/path/to/data2 索引数据的存储路径
path.work:/path/to/work 临时文件的存储路径
path.logs: /path/to/logs 日志文件的存储路径
path.plugins: /path/to/plugins 插件的存放路径
bootstrap.mlockall: true 锁住内存。可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过ulimit -l unlimited命令。
network.bind_host: 192.168.0.1 绑定的ip地址,默认为0.0.0.0
network.publish_host: 192.168.0.1 其它节点和该节点交互的ip地址
network.host: 192.168.0.1 同时设置bind_host和publish_host
transport.tcp.port: 9300 节点间交互的tcp端口,默认是9300。
transport.tcp.compress: false 是否压缩tcp传输时的数据,默认为false
http.port: 9200 对外服务的http端口,默认为9200
http.max_content_length: 100mb 内容的最大容量,默认100mb
http.enabled: true 是否使用http协议对外提供服务,默认为true
gateway.type: local gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置。
gateway.recover_after_nodes: 1 集群中N个节点启动时进行数据恢复,默认为1
gateway.recover_after_time: 5m 始化数据恢复进程的超时时间,默认是5分钟
gateway.expected_nodes: 2 这个集群中节点的数量,默认为2
cluster.routing.allocation.node_initial_primaries_recoveries: 4 初始化数据恢复时,并发恢复线程的个数,默认为4
cluster.routing.allocation.node_concurrent_recoveries: 2 加删除节点或负载均衡时并发恢复线程的个数,默认为4
indices.recovery.max_size_per_sec: 0 数据恢复时限制的带宽,如入100mb,默认为0,即无限制。
indices.recovery.concurrent_streams: 5 限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5
discovery.zen.minimum_master_nodes: 1 集群中的节点可以知道其它N个有master资格的节点。默认为1
discovery.zen.ping.timeout: 3s 集群中自动发现其它节点时ping连接超时时间,默认为3秒
discovery.zen.ping.multicast.enabled: true 是否打开多播发现节点,默认是true
discovery.zen.ping.unicast.hosts: [“host1”, “host2:port”, “host3 [portX-portY] “] 集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

其他配置

threadpool:search:type: fixedmin: 60max: 80queue_size: 1000
// 配置es服务器的执行查询操作时所用线程池,fix固定线程数的线程池。
index :store:type: memory
// 表示索引存储在内存中,当然es不太建议这么做。经本人测试,做查询时,使用内存索引并不会比正常的索引快。
index.mapper.dynamic: false
// 禁止自动创建mapping。默认情况下,es可以根据数据类型自动创建mapping。配置成这样,可以禁止自动创建mapping的行为。至于什么是mapping,在之后的博文中再介绍。
index.query.parse.allow_unmapped_fields: false
// 不能查找没有在mapping中定义的属性

3 ES Restful API基本使用

基于HTTP协议的Rest API

3.1 Mapping

在ES中,我们无需手动创建type(相当于table)和mapping(相关与schema)。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。也可以通过配置文件关闭ES的自动创建mapping功能。

mapping中主要包括字段名、字段数据类型和字段索引类型这3个方面的定义。

  • 数据类型
大类 小类
String string
Whole number byte, short, integer, long
Floating point float, double
Boolean boolean
Date date
  • 索引
    基于Apache Lucene,在ES中,只有建立了索引的字段,才能作为查询条件,不然只是数据

mapping中string类型字段可以配置的索引类型

索引类型 含义
analyzed 首先使用分析器(analyser)分析这个字符串,然后再建立索引。换言之,以全文形式索引此字段。
not_analyzed 索引这个字段,使之可以被搜索,但是索引内容和指定值一样。不分析此字段。
no 不索引这个字段。这个字段不能被搜索到。

3.2 REST API

3.2.1 集群信息

  • curl -XGET “localhost:9200/_cat/heath?v”
  • curl -XGET “localhost:9200/_cat/heath?help” 有字段含义
  • curl -XGET “localhost:9200/_cat/health?h=cluster,pri,relo&v” 查看指定字段

结果:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks
1440206633 18:23:53  elasticsearch green           1         1      0   0    0    0        0             0

返回结果的主要字段意义:

字段 含义
cluster 集群名,是在ES的配置文件中配置的cluster.name的值。
status 集群状态。集群共有green、yellow或red中的三种状态。green代表一切正常(集群功能齐全),yellow意味着所有的数据都是可用的,但是某些复制没有被分配(集群功能齐全),red则代表因为某些原因,某些数据不可用。如果是red状态,则要引起高度注意,数据很有可能已经丢失。
node.total 集群中的节点数。
node.data 集群中的数据节点数。
shards 集群中总的分片数量。
pri 主分片数量,英文全称为private。
relo 复制分片总数。
unassign 未指定的分片数量,是应有分片数和现有的分片数的差值(包括主分片和复制分片)。

3.2.2 集群中的节点信息

curl -XGET “localhost:9200/_cat/nodes?v”

host          ip            heap.percent ram.percent load node.role master name
master.hadoop localhost            3          35 0.00 d         *      Ezekiel

3.2.3 集群中的索引信息

curl -XGET “localhost:9200/_cat/indices?v”

health status index      pri rep docs.count docs.deleted store.size pri.store.size
yellow open   index_test   5   1          0            0       575b           575b

3.2.4 创建索引

  • curl -XPUT “localhost:9200/index_test”
  • curl -XPUT “localhost:9200/index_test” -d ’ 创建好settings和mapping
curl -XPUT "localhost:9200/index_test" -d ' # 注意这里的'号
{"settings": {"index": {"number_of_replicas": "1", # 设置复制数"number_of_shards": "5" # 设置主分片数}},"mappings": { # 创建mapping"test_type": { # 在index中创建一个新的type(相当于table)"properties": {"name": { # 创建一个字段(string类型数据,使用普通索引)"type": "string","index": "not_analyzed"},"age": {"type": "integer"}}}}
}'

3.2.5 删除索引

curl -XDELETE “localhost:9200/index_test”

3.2.6 创建索引的mapping

curl -XPUT 'localhost:9200/index_test/_mapping/test_type' -d '
{"test_type": { # 注意,这里的test_type与url上的test_type名保存一致"properties": {"name": {"type": "string","index": "not_analyzed"},"age": {"type": "integer"}}}}'

3.2.7 删除索引的mapping

curl -XDELETE ‘localhost:9200/index_test/_mapping/test_type’

3.2.9 查看索引的mapping

curl -XGET ‘localhost:9200/index_test/_mapping/test_type’

3.2.10 新增文档

这里的pretty参数的作用是使得返回的json显示地更加好看。1是文档的id值

curl -XPUT 'localhost:9200/index_test/test_type/1?pretty' -d '
{"name": "zhangsan","age" : "12"
}'

3.2.11 更新文档

这里的1必须是索引中已经存在id,否则就会变成新增文档操作

curl -XPOST 'localhost:9200/index_test/test_type/1?pretty' -d '
{"name": "lisi","age" : "12"
}'

3.2.12 删除文档

curl -XDELETE ‘localhost:9200/index_test/test_type/1?pretty’
这里的1必须是索引中已经存在id

3.2.13 查看文档

curl -XGET ‘localhost:9200/index_test/test_type/1?pretty’

3.3 REST API文档结构

cat.health.json文件为例简单地介绍这些Rest API文档的结构

{"cat.health": {"documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/cat-health.html", # 该文档对应的官方站点"methods": ["GET"], "url": { # url部分可选"path": "/_cat/health",  "paths": ["/_cat/health"],"parts": {},"params": {"local": {"type" : "boolean","description" : "Return local information, do not retrieve the state from master node (default: false)"},"master_timeout": {"type" : "time","description" : "Explicit operation timeout for connection to master node"},"h": {"type": "list","description" : "Comma-separated list of column names to display"},"help": {"type": "boolean","description": "Return help information","default": false},"ts": {"type": "boolean","description": "Set to false to disable timestamping","default": true},"v": {"type": "boolean","description": "Verbose mode. Display column headers","default": true}}},"body": null}
}

命令例子:
curl -XGET “localhost:9200/_cat/health?v” -d ‘body’

  • 第1部分(-XGET):对应文档中methods所包含的GET操作。
  • 第2部分(localhost:9200):是ES服务端所在主机的hostname和port。
  • 第3部分(/_cat/health):对应文档中的url。其中path是最简单的url;paths是除了path之外的其他url;parts描述和解释paths里面的url的可变部分(通常用{}包裹,如{index})。
  • 第4部分v:表示参数,对应文档中的params。像“v”这种boolean类型的参数,不需要特意指定其布尔值(true或者false),出现即表示true,否则为false。
  • 第5部分body:表示要传递的数据主体,对应文档中的body。如果body里面指明“required=true”,则表示必须传入body数据。具体body里面需要传怎样的数据,则可以访问文档中的documentation字段所指明的官方站点进行查询。

Elasticsearch笔记相关推荐

  1. 狂神Elasticsearch笔记

    ElasticSearch笔记 我们要讲解什么? SQL : like %狂神说% ,如果是的大数据,就十分慢!索引! ElasticSearch:搜索! (百度.github. 淘宝电商! ) 1. ...

  2. Elasticsearch笔记(三)基础知识

    Elasticsearch笔记(二)安装与使用 理论知识 索引.文档.节点.分片 索引.文档偏向开发人员 节点.分片偏向运维人员 文档(Document) 简介 Elasticsearch是面向文档的 ...

  3. Elasticsearch笔记-es基础版——一看就会

    文章目录 1.基础 2.语法 3.基本查询 4.高级查询 1.基础 elasticsearch是一个分布式的全文搜索引擎. 基于Lucene.具有restful的api接口.分布式,高横向扩展能力. ...

  4. Elasticsearch笔记基础入门

    并不能保证通过这四篇文章让你掌握ES,但是!我会用大白话串讲ES的一些概念.和花哨的玩法.起码可以把你对Elasticsearch的陌生度降到最低,等有一天你自己业务需要使用ES时,会因为提前读了ES ...

  5. Elasticsearch笔记三之版本控制和插件

    转载来源 :https://blog.csdn.net/ty4315/article/details/52264235 版本控制 1:关系型数据库使用的是悲观锁,数据被读取后就被锁定其他的线程就无法对 ...

  6. Elasticsearch笔记(九):实践篇-查找附近的人

    到这里Elasticsearch的整个系列分享就基本上结束了,当然后续还是会针对某一点进行讲解.为何要在实践篇中讲解"查找附近的人"呢?说实话,想了很久,最终才确定下来,总体希望这 ...

  7. Zhong__CentOS7安装Elasticsearch笔记

    时间:2019.04.12 环境:Centos 目的:Centos系统安装Elasticsearch 说明: 作者:Zhong QQ交流群:121160124 欢迎加入! ElasticSearch是 ...

  8. 【ElasticSearch笔记】

    ElasticSearch 全文搜索原理 计算文档相关性的算法:TF-IDF(词频-逆文档频率) 词频:查找的单词在文档出现次数越高,得分越高 逆文档频率:如果某个单词在所有文档中出现的次数较低,则其 ...

  9. Elasticsearch笔记(四)—— Java API的使用

    可结合上一篇(三)Elasticsearch基于Json的基本操作食用 查询相关的API 分页查询所有文档 @Autowiredprivate RestHighLevelClient hClient; ...

最新文章

  1. [转]安卓开发startservice 和bindservice详解
  2. axure8 事件改变样式_15. 教你零基础搭建小程序:小程序事件绑定(2)
  3. python3 aes 解密
  4. Web框架之Django_02基本操作(Django项目启动配置、数据库连接、orm、增删改查)
  5. 安卓APP_ 布局(1)—— LinearLayout
  6. win8计算机安全模式,WIN8如何设置按F8进入安全模式
  7. 《零基础》MySQL DELETE 语句(十五)
  8. 2017.9.30 CF #R4 D 思考记录
  9. java struts2 xss_Apache Struts2提供的最新demo中几处XSS(不严谨啊!不严谨啊!)
  10. java swing对话框_Java开发笔记(一百三十五)Swing的文件对话框
  11. 【CentOS 7笔记26】,打包和压缩工具的使用#171108
  12. win7系统怎么设置sql服务器,win7系统怎么安装sqlserver2000软件(图文)
  13. 极域电子教室V4窗口化
  14. 苹果系统安装驱动的五种方法
  15. 姓名大全 导入mysql_My SQL常用操作汇总详解
  16. mysql存储特殊表情符号,解决mysql存储特殊文字(表情符号)utf8mb4
  17. 使用 Envoy 和 AdGuard Home 阻挡烦人的广告
  18. stm32如何在官网下载标准函数库
  19. NV21 to NV12(YUV420SP)
  20. c语言五子棋如何添加计时,五子棋教程:计时

热门文章

  1. Matlab GUI编程技巧(十八)【实战一】:自定义线条图像绘制
  2. SAP固定资产模块的表
  3. laravel中artisan工具(命令)的使用详解
  4. Cubic(Custom Ubuntu ISO Creator)创建自定义镜像
  5. 不能不用也不可乱用的标准化和归一化处理
  6. Biotin-PEG2k-NHS,Biotin-PEG2000-NHS,PEG衍生物
  7. 血淋淋的经验!2021做亚马逊测评是搭上末班车?还是成为新韭菜?
  8. .net core 的图片处理及二维码的生成及解析
  9. TypeScript-打包
  10. linux中多个if嵌套使用方法,Objective-C嵌套if语句