1 基本概念
(1) Lucene:是一个开源的全文检索引擎工具包,提供了完整的查询引擎和索引引擎,但它不是一个完整的全文检索引擎.
(2) Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架.
(3) 搜索引擎:按照功能通常分为垂直搜索(专门针对某一类信息进行搜索)和综合搜索(对众多信息进行综合性的搜索).
(4) 倒排索引:对数据库原始的数据根据字或词进行索引,创建倒排索引数据区域,记录字或词在文档中出现位置(id列表)。用户有查询需求时,先访问倒排索引数据区域,得出文档id列表后,通过文档id即可快速、准确的找到具体的文档内容.
2 架构
(1) 集群(cluster):集群中有多个节点,其中有一个为主节点,主节点通过选举产生的.
(2) 分片(shards):ES可以把一个完整的索引分成多个分片,分布到不同的节点上,构成分布式搜索.分片的数量只能在索引创建前指定,创建后不能更改.
(3) 副本(replicas):ES可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复.二是提高ES的查询效率,ES会自动对搜索请求进行负载均衡.
(4) 索引(index):存储数据的表结构,任何搜索数据,存放在索引对象上.
(5) 文档类型(type):一个索引对象存放多种类型数据,数据用文档类型进行标识
(6) 映射(mapping):数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型、是否存储、是否分词等.
(7) 文档(document):一条数据记录,存在索引对象上.
Elasticsearch 集群可以包含多个索引(Index),每个索引可以包含多个类型(Type),每个类型可以包含多个文档(Document),每个文档可以包含多个字段(Field).
4 命令
4.1 系统配置
(1) 启动:bin/elasticsearch -d
(2) 停止:jps找到进程名为Elasticsearch对应的pid,杀掉进程
4.2 创建
(1) 创建索引
curl -XPUT http://ip:8200/index -d '
{
"settings": {
"index": {
"number_of_shards": "5",
"number_of_replicas": "1"
}
},
"mappings": {
"type": {
"properties": {
"tot_bring_pv": {
"type": "long"
},
"tag_comm_detain": {
"type": "integer"
},
"user_register_dur": {
"type": "long"
}
}
}
}
}
4.3 修改
(1) 添加文档,指定doc_id.
curl -i -XPUT http://ip:8200/index/type/1 -d '
{
"birthday": null,
"tenant_id": "1195139863579501676",
"gender": "0",
"city": null,
"user_name": ""
}'
备注:也可用于修改文档
(2) 添加文档,自动产生文档id
curl -i -XPOST http://ip:8200/index/type/ -d '
{
"birthday": null,
"tenant_id": "1195139863579501676",
"gender": "0",
"city": null,
"user_name": ""
}'
4.4 删除
(1) 删除文档
curl -i -XPOST "http://ip:8200/index/_delete_by_query" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"phone_number": "13672438580"
}
}
}
(2) 删除索引(谨慎)
#curl -i -XDELETE http://ip:8200/test_index/
5.5 查询
(1) 查询总记录数
curl -i -XGET 'http://ip:8200/feizhi_index/_count'
(2) 匹配查询
curl -i -XGET 'http://ip:8200/index/type/_search' -d '{
"query": {
"match": {
"phone_number": "13672438580"
}
}
}'
(3) sql查询
curl -i XGET "http://ip:8200/_sql?sql=select%20*%20from%20index%20where%20phone_number=13536149112"
5.6 参数配置
(1) 设置每分钟可执行script的数量
curl -XPUT http://ip:8200/_cluster/settings -d '{ "transient": { "script.max_compilations_per_minute": 200 } }'
(2) 带账号密码
curl -i -XGET 'http://172.30.99.51:8200/index/_count' -u 'elastic:Qinglian!2019'
(3) 禁止自动添加类型字段
PUT your_index
{
"mappings":{
"doc": {
"dynamic": "strict",
"properties": {
...
}
}
}
}