返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.htmlhtml
a. 在上面博客中,咱们已经安装而且成功配置了Elasticsearch以及部分插件,接下来咱们就须要看看Elasticseach的配置文件的信息以及文档的一些说明。node
b.首先找到Elasticsearch的安装位置,跳转到elasticsearch的config文件夹下,在此文件夹下含有两个配置文件:elasticsearch.yml和logging.yml,第一个是Elasticsearch的基本配置文件,第二个是日志配置文件,Elasticsearch是使用log4j来记录日志的,因此logging.yml里的设置按普通的log4j配置文件夹来设置便可。下面咱们主要来讲一下elasticsearch.yml文件中的配置信息。linux
c.文档说明采用写备注的方法来讲明elasticsearch.yml文件,Elasticsearch的版本是:2.3.1。mongodb
c.1 cluster.name: kencery 配置Elasticsearch的集群名称,默认是elasticsearch,Elasticsearch会自动发如今同一网段下的es集群,若是在同一个网段下有多个集群,能够利用这个属性来区分不一样的集群。数据库
c.2 node.name : "kencery-node1" 集群的节点名称,Elasticsearch启动的时候会自动建立节点名称,可是你也能够进行配置。编程
c.3 node.rack: r1 每一个节点均可以定义一些与之关联的通用属性,用于后期集群进行碎片分配时的过滤。bootstrap
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
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的数据处理对象的来源以及选择和有点,那么下面咱们来讲一下面向文档的开发。
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等其它语言):
1 using System; 2 using System.Collections.Generic; 3 4 namespace Common 5 { 6 /// <summary> 7 /// 员工实体 8 /// </summary> 9 public class Emplyee 10 { 11 /// <summary> 12 /// 员工Id 13 /// </summary> 14 public string Id { get; set; } 15 16 /// <summary> 17 /// 员工名称 18 /// </summary> 19 public string Name { get; set; } 20 21 /// <summary> 22 /// 员工年龄 23 /// </summary> 24 public int Age { get; set; } 25 26 /// <summary> 27 /// 是否实习 28 /// </summary> 29 public bool IsPractice { get; set; } 30 31 /// <summary> 32 /// 兴趣爱好 33 /// </summary> 34 public string[] Interests { get; set; } 35 36 /// <summary> 37 /// 加入公司时间 38 /// </summary> 39 public DateTime JoinDate { get; set; } 40 41 /// <summary> 42 /// 员工家庭信息 43 /// </summary> 44 public Home Home { get; set; } 45 46 /// <summary> 47 /// 员工帐号信息 48 /// </summary> 49 public List<Accounts> Accounts { get; set; } 50 } 51 52 53 /// <summary> 54 /// 员工家庭信息 55 /// </summary> 56 public class Home 57 { 58 /// <summary> 59 /// 纬度 60 /// </summary> 61 public double Lat { get; set; } 62 63 /// <summary> 64 /// 经度 65 /// </summary> 66 public double Long { get; set; } 67 } 68 69 /// <summary> 70 /// 员工帐号信息 71 /// </summary> 72 public class Accounts 73 { 74 /// <summary> 75 /// 类型 76 /// </summary> 77 public string Type { get; set; } 78 79 /// <summary> 80 /// 值 81 /// </summary> 82 public string Value { get; set; } 83 } 84
d.2 赋值生成一个JSON对象,以下图所示:
e.几乎全部的语言都有相应的模块用于将任意数据结构转换为JSON,但每种语言处理的细节不一样,Elasticsearch官方客户端会自动为咱们序列化和反序列化JSON,下面开始你的Elasticsearch学习之旅吧。
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自动帮你生成。
天天一点点都是进步
若是文章哪里存在问题,欢迎你们指出来,我会在第一时间修改。