目录

  返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html

1.Elasticsearch配置文件详解

  a. 在上面博客中,我们已经安装并且成功配置了Elasticsearch以及部分插件,接下来我们就需要看看Elasticseach的配置文件的信息以及文档的一些说明。

  b.首先找到Elasticsearch的安装位置,跳转到elasticsearch的config文件夹下,在此文件夹下含有两个配置文件:elasticsearch.yml和logging.yml,第一个是Elasticsearch的基本配置文件,第二个是日志配置文件,Elasticsearch是使用log4j来记录日志的,所以logging.yml里的设置按普通的log4j配置文件夹来设置即可。下面我们主要来说一下elasticsearch.yml文件中的配置信息。

  c.文档说明采用写备注的方法来说明elasticsearch.yml文件,Elasticsearch的版本是:2.3.1。

    c.1  cluster.name: kencery   配置Elasticsearch的集群名称,默认是elasticsearch,Elasticsearch会自动发现在同一网段下的es集群,如果在同一个网段下有多个集群,可以利用这个属性来区分不同的集群。

    c.2  node.name : "kencery-node1"    集群的节点名称,Elasticsearch启动的时候会自动创建节点名称,但是你也可以进行配置。

    c.3  node.rack: r1    每个节点都可以定义一些与之关联的通用属性,用于后期集群进行碎片分配时的过滤。

    c.4  path.data: /path/to/data    设置索引数据的存储路径,默认是Elasticsearch根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,是的数据在文件级别跨域位置,这样在创建时就有更多的自由路径,如:path.data: /path/to/data1,/path/to/data2

    c.5  path.logs: /path/to/logs    设置日志文件的存储路径,默认是Elasticsearch根目录下的logs文件夹。

    c.6  bootstrap.mlockall: true    设置为true来锁住内存,因为当JVM开始swapping的时候Elasticsearch的效率会降低,所以要保证他不被swap,可以吧ES_MIN_MEN和ES_MAX_MEN两个环境变量设置为同一个值,并且保证机器有足够的内存分配给Elasticsearch,同时也要允许Elasticsearch的进程可以锁住内存,linux下可以通过`ulimit -l unlimited`命令。

    c.7  network.host: 192.168.37.133    设置绑定的IP地址,可以是ipv4或者ipv5,默认使用0.0.0.0地址,并为http传输开启9200、9300端口,为节点到节点的通信开启9300-9400端口,也可以自行设置IP地址。

    c.8  http.port: 9200    设置对外服务的Http端口,默认是9200

    c.9  discovery.zen.ping.unicast.hosts: ["192.168.37.133", "192.168.37.137"]     设置集群中master节点的初始化列表,可以通过这些节点来自动发现新加入集群的节点(主要用于不同网段机器连接)。

    c.10  discovery.zen.minimum_master_nodes: 3    设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点,默认为1,当集群多余三个节点时,可以设置大一点的值(2-4)

    c.11  gateway.recover_after_nodes: 3    设置集群中国N个节点启动时进行数据恢复,默认是1

    c.12  node.max_local_storage_nodes: 1 默认情况下,多个节点可以在同一个安装路径启动,如果你想让你的Elasticsearch只启动一个节点,在这合理设置。

    c.13  action.destructive_requires_name: true    设置是否可以通过正则或者_all删除或者关闭索引。

  d. 上面所有的节点信息都是在配置文件中存在的,有些节点信息配置文件没有显示(不推荐修改),可以查看这里学习:http://www.zihou.me/html/2014/01/17/9061.html

  e. 上面只是简单描述了一些Elasticsearch配置文件中的信息,详细配置请看你安装的Elasticsearch里面的配置文件的信息.

  f. 关于Elasticsearch的基础概念,请参考:http://blog.csdn.net/cnweike/article/details/33736429

2. 数据对象处理

  a. 在编程中,无论我们的程序如何去写,相信最终的目标是数据为我们服务,但是在众多的条件下,数据并不只是简单的由随机比特和字节组成的没有意义的数据,所以我们会在数据库的节点之间使用关联来表示现实世界中的某些事物,比如:在现实的世界中,并不是所有的实体类型看起来是一样的,比如公司员工(Employee):一个人可能只有一个座机号码,另一个人可能只有一个手机号码,而有些人可能两者都有,一个人可能有Email,其他人也可能没有。那么如何解决这种问题呢?相信大家第一时间都会想到面向对象,是的,我们可以使用对象来处理现实世界中的这些有着复杂结构的实体。到目前为止,基本所有的开发语言都支持面向对象。

  b. 但是当我们想存储下来这些实体时便存在了问题,大部分引用中,我们使用行和列的形式把数据存储在关系型数据库中,但是这种固定的存储方式导致对象的灵活性不存在了,那么如何能以对象的形式存储对象呢?相对于围绕表格去为我们的程序建模,我们可以更加专注于使用数据,把对象的灵活性给释放(mongodb就是这方面典型的代表)。

  c. 对象(Object)是一种语言相关,记录在内存中的数据结构,为了在网络间发送或者储存它,故而出现了标准的格式来表示它,JSON(JavaScript Object Notation)是一种可读的以文本来表示对象的方式,它已经成为NoSql世界中数据交换的一种事实标准,当对象被序列化为JSON,它就成为JSON文档了。

  d. Elasticsearch是一个分布式的文档(Document)存储引擎,他可以实时存储并且检索复杂的数据结构(序列化的JSON文档),换言之一旦文档被存储在Elasticsearch中,它就可以在集群的任意一个节点上被检索,当然我们不仅需要存储数据,还需要快速的批量查询,虽然很多NoSql的解决方案允许以文档的形式存储对象,但它们依旧需要考虑如何查询这些数据以及那些字段需要添加索引来使检索时更加快速,而在Elasticsearch中,每一个字段的数据都是默认添加了索引,也就是说,每个字段专门有一个反向索引用于快速检索,而且与其他的数据库不同的是他可以在同一个查询中利用所有的这些反向索引,来快速的返回结果。

  e. Elasticsearch使用JSON(JavaScript Object Notation)作为文档序列化格式,JSON已经被大多数语言所支持,而且已经成为了NoSql领域的标准格式,它简洁、简单而且容易阅读。

  f. 上面简述了Elasticsearch的数据处理对象的来源以及选择和有点,那么下面我们来说一下面向文档的开发。

3. 面向文档的开发

  a. 什么是面向文档的开发呢?通常,我们可以认为对象(object)和文档(document)是等价想通的,不过在Elasticsearch中,他们还是有所差别的,对象(Object)是一个JSON结构体(类似于哈希,hashmap,字典或者关联数组),对象(Object)中还可能包含其他对象(Object),在Elasticsearch中,文档(document)这个属于有着特殊的含义它特质最顶层结构或者根对象(root object)序列化的Json数据(以唯一Id标识并且存储在Elasticsearch中)。

  b. ELasticsearch是面向文档的,这就意味着他可以存储整个对象或文档,然而它不仅仅死存储,还会索引(index)每个文档的内容使之可以被搜索,在Elasticsearch中,你可以对文档对象模型进行索引、搜索、排序、过滤。这就是Elasticsearch能够执行复杂的全文搜索的原因之一。

  c.程序中大多数的实体或者对象能够被序列化为包含键值对的JSON对象,键(Key)是字段(field)或属性(property)的名字,值(value)可以是字符串、数字、布尔类型、对象、数组或者其它特殊类型。

  d. 这里我使用C#创建了一个员工类,在里面声明了一些字段属性,在后面的文章中将统一使用这个实体类来操作,尽管原始的Employee对象很复杂,但它的结构和对象的含义已经被完成的体现在JSON中了,所以在Elasticsearch中将对象转化为JSON并做索引要比在表结构中做相同的事情简单的多。如下所示:实体以及转换后的JSON。

    d.1 实体类如下(C#所写,大家可以转换成Java等其它语言):

 using System;
using System.Collections.Generic; namespace Common
{
/// <summary>
/// 员工实体
/// </summary>
public class Emplyee
{
/// <summary>
/// 员工Id
/// </summary>
public string Id { get; set; } /// <summary>
/// 员工名称
/// </summary>
public string Name { get; set; } /// <summary>
/// 员工年龄
/// </summary>
public int Age { get; set; } /// <summary>
/// 是否实习
/// </summary>
public bool IsPractice { get; set; } /// <summary>
/// 兴趣爱好
/// </summary>
public string[] Interests { get; set; } /// <summary>
/// 加入公司时间
/// </summary>
public DateTime JoinDate { get; set; } /// <summary>
/// 员工家庭信息
/// </summary>
public Home Home { get; set; } /// <summary>
/// 员工账号信息
/// </summary>
public List<Accounts> Accounts { get; set; }
} /// <summary>
/// 员工家庭信息
/// </summary>
public class Home
{
/// <summary>
/// 纬度
/// </summary>
public double Lat { get; set; } /// <summary>
/// 经度
/// </summary>
public double Long { get; set; }
} /// <summary>
/// 员工账号信息
/// </summary>
public class Accounts
{
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; } /// <summary>
/// 值
/// </summary>
public string Value { get; set; }
}

    d.2 赋值生成一个JSON对象,如下图所示:

                

  e.几乎所有的语言都有相应的模块用于将任意数据结构转换为JSON,但每种语言处理的细节不同,Elasticsearch官方客户端会自动为我们序列化和反序列化JSON,下面开始你的Elasticsearch学习之旅吧。

4. 文档元数据

  a. 在Elasticsearch下,一个文档中不只有数据,它还包含了元数据(metadata),在Elasticsearch下,每创建一条数据,都会对元数据进行写入等操作,元数据在Elasticsearch下起到了非常大的作用,关于三个必须的元数据节点如下(赋图):

节点 说明
 _index  文档存储的地方(类似于数据库,只可以这样理解)
_type  文档代表的对象的类(类似于数据库中的表,只可以这样理解) 
_id  文档的唯一标识(类似于数据库中表的主键,只可以这样理解) 

  

  b. _index  索引(index)类似于关系型数据库里的"数据库",它是存储和索引关联数据的地方。

    b.1 事实上,我们的数据被存储和索引在分片(shards)中,索引只是一个把一个或者多个分片分组在一起的逻辑空间,然而内部的一些细节不需要我们程序关心,文档存储在索引(index)中,剩下的需要的工作交由Elasticsearch关心即可。

    b.2  我们将在后面的文章中将会阐述如何创建并且管理索引,而现在使用Elasticsearch创建索引只需要选择一个索引名,这个名称必须全部小写,不能以下划线开头,不能包含逗号。如上面定义的类所示,后面我们将使用公司(company)作为索引名。

  c. _type

    c.1 如上面所说说,在现实世界中,我们使用对象标识一些"事物",每个对象都属于一个类(class,如:Employee),这个类定义了属性或者对象关联的数据。

    c.2 在关系型数据库中,我们经常讲相同累的对象储存在一个表里面,因为他们有着相同的结构,当然在Elasticsearch中,我们可以使用相同类型(type)的文档表示相同的"事物",因为他们的数据结构是相同的,每个类型都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样,所有类型下的文档被储存在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被缩影,后面会说到。

    c.3 _type的命名规范,它的名字可以是大写或者小写,不能包含下划线或逗号,后面我们将使用employee作为类型名。

  d. _id  一个字符串,它与_index和_type组合时,就可以在Elasticsearch中唯一标识一个文档,当创建一个文档的时候,你可以自定义_id,也可以让Elasticsearch自动帮你生成。

        通过这篇文章,我们了解了ELasticsearch 配置文件以及一些文档的基础信息,下篇博客我们将会阐述Easticsearch通信方式。
 

每天一点点都是进步

如果文章哪里存在问题,欢迎大家指出来,我会在第一时间修改。

Elasticsearch配置详解、文档元数据的更多相关文章

  1. elasticsearch配置详解

    一.说明 使用的是新版本5.1,直接从官网下载rpm包进行安装,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5 ...

  2. ElasticSearch 配置详解

    配置文件位于es根目录的config目录下面,有elasticsearch.yml和logging.yml两个配置,主配置文件是elasticsearch.yml,日志配置文件是logging.yml ...

  3. Nginx入门详解文档

    1 文章内容 掌握nginx+tomcat反向代理的使用方法. 掌握nginx作为负载均衡器的使用方法. 掌握nginx实现web缓存方法. 2 nginx介绍 2.1 什么是nginx Nginx是 ...

  4. (转)Elasticsearch 5 Ik+pinyin分词配置详解

    今天以这篇文章结束同城旅游网的面试,正好面试官也问到站内检索,可以尝试一下这篇文章介绍的方法.Elasticsearch 5 Ik+pinyin分词配置详解

  5. 日志分析工具ELK配置详解

    日志分析工具ELK配置详解 一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  6. maven常用插件配置详解

    常用插件配置详解Java代码    <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...

  7. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解

    注意:这里不会讲到nginx流媒体模块如何安装的问题,只研究rtmp,hls直播和录制相关的nginx服务器配置文件的详细用法和说明.可以对照这些命令详解配置nginx -rtmp服务 一.nginx ...

  8. Apache2 httpd.conf 配置详解

    Apache2 httpd.conf 配置详解 <第一部分> 常用配置指令说明 1. ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相 ...

  9. 搜索引擎框架之ElasticSearch基础详解(非原创)

    文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...

随机推荐

  1. SQLyog图形化l数据库的操作和学习

    1:首先SQLyog作为mysql的图形化操作工具,是一个收费的工具,但是在天朝大国,任何收费的软件都可以被破解,具体软件的安装不做多叙述,支持正版,毕竟作为一个开发人员,辛辛苦苦开发出来的软件,还指 ...

  2. let命令

    基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调 ...

  3. MongoDB 文档的更新操作

    在MongoDB中,更新单个doc的操作是原子性的.默认情况下,如果一个update操作更新多个doc,那么对每个doc的更新是原子性的,但是对整个update 操作而言,不是原子性的,可能存在前面的 ...

  4. Web API接口之Geolocation

    0.关于Geolocation Geolocation,地理位置API.用于获取用户的位置信息.它不算是现有的HTML5标准的“直系”成员,但是是W3C的一个标准.它几乎就是一个真正的JavaScri ...

  5. C# 将PowerPoint文件转换成PDF文件

    PowerPoint的优势在于对演示文档的操作上,而用PPT查看资料,反而会很麻烦.这时候,把PPT转换成PDF格式保存,再浏览,不失为一个好办法.在日常编程中和开发软件时,我们也有这样的需要.本文旨 ...

  6. Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)

    原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...

  7. js的并行加载以及顺序执行

    重新温习了下这段内容,发现各个浏览器的兼容性真的是搞大了头,处理起来很是麻烦. 现在现总结下并行加载多个js的方法: 1,对于动态createElement('script')的方式,对所有浏览器都是 ...

  8. DotNet的JSON序列化与反序列化

    JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有 ...

  9. Apworks框架实战(三):单元测试与持续集成

    虽然这部分内容并没有过多地讨论Apworks框架的使用,但这部分内容非常重要,它与Apworks框架本身的设计紧密相关,也是进一步了解Apworks框架设计的必修课. 单元测试与持续集成概述 在敏捷开 ...

  10. 故障恢复和恢复模式(Crash Recovery & Recovery Models)

    数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下. 恢复模式(Recovery Models) 对于这个问题的最简单的答案是不会:恢复模型不 ...