Elasticsearch学习系列一

Elasticsearch

  Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎。它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索和分析服务,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够实现实时搜索,可以搜索日志或者交易数据,用来分析商业趋势、搜集日志、分析系统瓶颈或者运行发展等等,可以提供预警功能(持续的查询分析某个数据,如果超过一定的值,就进行警告),分析商业信息,在百万级的大数据中轻松的定位关键信息,等等..

  PS:Lucene不是一个完整的全文索引应用,而是一个用Java语言开发的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。详见Lucene:基于Java的全文检索引擎简介

基本概念 

  想了解ES首先就要弄清楚下面的几个概念,这样可以更加方便的学习ES,也不会对ES产生一些误解:

  近实时(NRT)

  ES并不是一个标准的数据库,它不像MongoDB,它侧重于对存储的数据进行搜索。因此要注意到它 不是 实时读写 的,这也就意味着,刚刚存储的数据,并不能马上查询到。当然这里还要区分查询的方式,ES也有数据的查询以及搜索,这里的近实时强调的是搜索....

  集群(Cluster)

  在ES中,对用户来说集群是很透明的。你只需要指定一个集群的名字(默认是elasticsearch),启动的时候,凡是集群是这个名字的,都会默认加入到一个集群中。你不需要做任何操作,选举或者管理都是自动完成的。

  注意,如果群集中只有一个节点,那么它是完全正常的。此外,您还可以拥有多个独立的集群,每个集群都有自己唯一的集群名称。

  节点(Node)

  节点是作为群集一部分的单个服务器,存储数据并参与群集的索引和搜索功能。就像集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。可以将节点配置为按群集名称加入特定群集。默认情况下,每个节点都设置为加入一个名为cluster的集群elasticsearch,这意味着如果您在网络上启动了许多节点并且假设它们可以相互发现 - 它们将自动形成并加入一个名为的集群elasticsearch

  注意,在单个群集中,您可以拥有任意数量的节点。此外,如果您的网络上当前没有其他Elasticsearch节点正在运行,则默认情况下启动单个节点将形成一个名为的新单节点集群elasticsearch

  索引(Index) 

  索引是具有某些类似特征的文档集合。索引由名称标识(必须全部小写),此名称用于在对其中的文档执行索引,搜索,更新和删除操作时引用索引。在单个群集中,您可以根据需要定义任意数量的索引。

  类型(Type)

  类型可以理解成一个索引的逻辑分区,用于标识不同的文档字段信息的集合。但是由于ES还是以索引为粗粒度的单位,因此一个索引下的所有的类型,都存放在一个索引下。这也就导致不同类型相同字段名字的字段会存在类型定义冲突的问题。在6.0.0中已弃用。

  文档(Document)

  文档是存储数据信息的基本单元,使用json来表示。在索引/类型中,您可以根据需要存储任意数量的文档。

  注意,尽管文档实际上驻留在索引中,但实际上必须将文档编入索引/分配给索引中的类型。

  分片与副本(Share & Replicas)

  在ES中,索引会备份成分片,每个分片是独立的lucene索引,可以完成搜索分析存储等工作。创建索引时,只需定义所需的分片数即可。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。在可以随时发生故障的网络/云环境中,非常有用,强烈建议使用故障转移机制,以防分片/节点以某种方式脱机或因任何原因消失。为此,Elasticsearch允许您将索引的分片的一个或多个副本制作成所谓的副本分片或简称副本。

  总而言之,每个索引可以拆分为多个分片。索引也可以复制为零(表示没有副本)或更多次。复制后,每个索引都将具有主分片(从中复制的原始分片)和副本分片(主分片的副本)。可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您可以随时动态更改副本数,但不能在事后更改分片数。默认情况下,Elasticsearch中的每个索引都分配了5个主分片和1个副本,这意味着如果群集中至少有两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本),总计为每个索引10个分片。

安装

  ES在开发整合时至少需要Java 8,所以在安装之前ES之前,需要确保安装了Java 8 并配置好环境变量。这里我不多介绍,可以查看我往期的博客Linux服务部署--Java(一)

  本文介绍的是单机版,Linux环境常用的wget下载elasticsearch-5.5.1.tar.gz,其他环境或方式可以参考官方文档。目前官方推荐使用的是ES 6.X,目前还不清楚是否有插件兼容问题,所以还是选择的市场主流的ES 5.5.X。

下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.tar.gz

解压

tar -xvf elasticsearch-5.5.1.tar.gz

启动

cd  /elasticsearch-5.5.1
./bin/elasticsearch

如果这时报错"max virtual memory areas vm.maxmapcount [65530] is too low",运行下面的命令。

sudo sysctl -w vm.max_map_count=262144

修改集群和节点名称

./elasticsearch -Ecluster.name=my_cluster -Enode.name=my_node

默认情况下,Elasticsearch使用port 9200来提供对其REST API的访问。启动完成后,打开另一个命令行窗口,请求该端口,会得到说明信息。

curl localhost:9200

{
  "name" : "my_node",
  "cluster_name" : "my_cluster",
  "cluster_uuid" : "tf9250XhQ6ee4h7YI11anA",
  "version" : {
    "number" : "5.5.1",
    "build_hash" : "19c13d0",
    "build_date" : "2018-10-24T20:44:24.823Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

PS:默认情况下,ES 只允许本机访问,如果需要远程访问,可以修改 Elastic 安装目录的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,让任何人都可以访问(线上环境别这么设置哦),然后重新启动 ES。当然,也可以在这里修改集群和节点名称。

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster 集群名称:
#
cluster.name: my_cluster
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node 节点名称:
#
node.name: my_node
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma) 数据路径:
#
#path.data: /path/to/data      
#
# Path to log files 日志路径:
#
#path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6)绑定的Ip地址:
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP 端口:
#
http.port: 9200
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started 设置集群:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1) 防止脑裂:
#
#discovery.zen.minimum_master_nodes: 3
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

当然,ES启动会出现各种各样的错误,比如内存分配不足,无法使用root用户启动,启动直接Killed等等..可以查看Elasticsearch启动错误 和 Centos7下避坑安装elasticsearch。

原文地址:https://www.cnblogs.com/JackpotHan/p/9951483.html

时间: 2024-10-21 07:53:39

Elasticsearch学习系列一的相关文章

ElasticSearch实战系列四: ElasticSearch理论知识介绍

前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是一个实战派,不太喜欢讲这些理论知识,因为这块可以查看官方文档,那里会写得非常详细,但是在使用了ElasticSearch之后,发现有的知识点需要掌握一定的理论知识才能理解,对于初学者来说有的不好理解,因此写下该篇文章,希望读者在看完之后能够有所帮助. ElasticSearch 理论知识介绍 Ela

Android学习系列(17)--App列表之圆角ListView(续)

http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)--App列表之圆角ListView中的,但是若是如此就让大家错过一篇新的好的文章,着实可惜.上篇中我们使用shape,corners,gradient实现了一个渐变的圆角效果,但是在完文之后的实践中,我发现有时效果不甚满意,选中和放手的事件监听没有去正确的判断,然后渐变效果也比较单一,性能也觉得不是很快

ASP.NET MVC学习系列(二)-WebAPI请求

继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现数据调用. 继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用. 一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中的GetU

Caffe学习系列——工具篇:神经网络模型结构可视化

Caffe学习系列--工具篇:神经网络模型结构可视化 在Caffe中,目前有两种可视化prototxt格式网络结构的方法: 使用Netscope在线可视化 使用Caffe提供的draw_net.py 本文将就这两种方法加以介绍 1. Netscope:支持Caffe的神经网络结构在线可视化工具 Netscope是个支持prototxt格式描述的神经网络结构的在线可视工具,网址:  http://ethereon.github.io/netscope/quickstart.html  它可以用来可

Intelli IDEA学习系列之快捷键篇

Intelli IDEA学习系列之快捷键篇 IDEA简介: IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合.代码审查. 创新的GUI设计等方面的功能可以说是超常的.IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主. 在学习过程中会慢慢补充..... [1.查找] 1

Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这部分内容需要以下Jar包支持 mysql-connector:MySQL数据库连接驱动,架起服务端与数据库沟通的桥梁: MyBatis:一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架: log4j:Apache的开源项目,一个功能强大的日志组件,提供方便的日志记录: 修改后的pom.xm

Oracle学习系列4

Oracle学习系列4 ************************************************************************************ 数据库更新操作: 分类: 查询操作:select 更新操作:insert ,update , delete 为了保存原始的emp表的信息,在进行增删改之前备份词表: create table emp_bak as select * from emp ; //将表emp结构和数据完整的复制出来 添加数据:

Oracle学习系列3

Oracle学习系列3 ************************************************************************************ 多表查询: 1,SQL1999语法对多表查询的支持 2,分组统计及统计函数的使用 3,子查询,并结合多表查询,分组统计做复杂查询 4,数据库的更新操作 5,事务处理和数据库死锁 ****************************************************************

Unity-Animator学习系列总索引

花了不少时间完成了这篇Unity Animator学习系列文章,其中API部分很多都是亲测.希望能对路过的博友有所帮助 相关参考文档 Unity Animator官方组件文档 Unity Animator官方脚本文档 圣典的部分汉化文档 Animator学习系列总目录 1.Unity-Animator学习系列---API 2.Unity-Animator学习系列---控制IK 3.Unity-Animator学习系列---剪辑播放后位置预判(Animator.Target) 4.Unity-An