是一个基于Apache Lucene™的开源搜索引擎
前置条件: JDK版本不能低于1.7_55
cd /home/elasticsearch/elasticsearch-1.5.0/bin/
chmod +x *
./elasticsearch
补充:
warning: ignoring JAVA_HOME=C:\Java\jdk1.8.0_191; using bundled JDK
{
"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"
}
配置文件所在的目录路径如下:$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: fixed
min: 60
max: 80
queue_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中定义的属性
基于HTTP协议的Rest API
在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 |
mapping中string类型字段可以配置的索引类型
索引类型 | 含义 |
---|---|
analyzed | 首先使用分析器(analyser)分析这个字符串,然后再建立索引。换言之,以全文形式索引此字段。 |
not_analyzed | 索引这个字段,使之可以被搜索,但是索引内容和指定值一样。不分析此字段。 |
no | 不索引这个字段。这个字段不能被搜索到。 |
结果:
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 | 未指定的分片数量,是应有分片数和现有的分片数的差值(包括主分片和复制分片)。 |
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
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
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"
}
}
}
}
}'
curl -XDELETE “localhost:9200/index_test”
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"
}
}
}
}'
curl -XDELETE ‘localhost:9200/index_test/_mapping/test_type’
curl -XGET ‘localhost:9200/index_test/_mapping/test_type’
这里的pretty参数的作用是使得返回的json显示地更加好看。1是文档的id值
curl -XPUT 'localhost:9200/index_test/test_type/1?pretty' -d '
{
"name": "zhangsan",
"age" : "12"
}'
这里的1必须是索引中已经存在id,否则就会变成新增文档操作
curl -XPOST 'localhost:9200/index_test/test_type/1?pretty' -d '
{
"name": "lisi",
"age" : "12"
}'
curl -XDELETE ‘localhost:9200/index_test/test_type/1?pretty’
这里的1必须是索引中已经存在id
curl -XGET ‘localhost:9200/index_test/test_type/1?pretty’
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’