当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给lucene。
当机器内存大于64G时,遵循以下原则:
a. 如果主要的使用场景是全文检索, 那么建议给ES Heap分配 4~32G的内存即可;其它内存留给操作系统, 供lucene使用(segments cache), 以提供更快的查询性能。
b. 如果主要的使用场景是聚合或排序, 并且大多数是numerics, dates, geo_points 以及not_analyzed的字符类型, 建议分配给ES Heap分配 4~32G的内存即可,其它内存留给操作系统,供lucene使用(doc values cache),提供快速的基于文档的聚类、排序性能。
c. 如果使用场景是聚合或排序,并且都是基于analyzed 字符数据,这时需要更多的 heap size, 建议机器上运行多ES实例,每个实例保持不超过50%的ES heap设置(但不超过32G,堆内存设置32G以下时,JVM使用对象指标压缩技巧节省空间),50%以上留给lucene。
禁止swap,一旦允许内存与磁盘的交换,会引起致命的性能问题。 通过: 在elasticsearch.yml 中 bootstrap.memory_lock: true, 以保持JVM锁定内存,保证ES的性能。
-7.x中的type已经过时,默认设置为_doc
所有的命令都为大写
命令 | url | 解释 |
---|---|---|
PUT | /索引名称/类型名称/文档ID | 创建文档(指定文档ID) |
POST | /索引名称/索引类型 | 创建文档(随机文档ID) |
POST | /索引名称/类型名称/文档id/_update | 修改文档 |
POST | /索引名称/类型名称/_search | 查询数据 |
DELETE | /索引名称/类型名称/文档id | 删除文档/或者索引 |
GET | /索引名称/类型名称/文档id | 查询文档通过文档ID |
类型 | 对应类型 | 说明 |
---|---|---|
字符串 | text keyword | text自动分词,keyword全文匹配 |
整型 | byte short integer long | |
浮点型 | float double half_float scaled_float | |
日期 | date | |
布尔 | boolean | |
二进制 | binary | |
范围 | range | |
数组 | array | |
对象 | object | |
嵌套 | nested | |
ip | ip (IPv4 和 IPv6 地址) |
添加数据可以在自动索引生成之后,先查询Mapping,在Mapping的基础上进行修改索引的字段
规范:数据中String不需要进行分词的,type必须设置为keyword
POST index_name
{
"settings": { ... any settings ... },
"mappings" : {
"properties" : {
"field1" : {
"type" : "keyword"
},
"field2" : {
"type" : "long"
},
"field3" : {
"type" : "text"
},
"field4" : {
"type" : "date"
},
"field5" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
POST index_name/_doc
{
"name" : "姓名" ,
"age" : "年龄" ,
"sex" : "性别"
}
禁止自动创建索引
可以通过在 config/elasticsearch.yml 的每个节点下添加下面的配置:
action.auto_create_index: false
修改副本数量为0
PUT /test-index-users/_settings
{
"settings": {
"number_of_replicas": 0
}
}
一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写操作。
POST index_name/_close
POST index_name/_open
DELETE index_name
PUT /es_medias_test2
{
"settings": {
"analysis": {
"analyzer": {
"comma": { //自定义分词器名称
"type": "pattern",
"pattern": ","
}
}
}
},
"mappings": {
"esmedias": {
"properties": {
"mediaTag": {
"type": "text",
"analyzer": "comma"
}
}
}
}
}
自定义分词器
PUT test_index2
{
"settings":{
"analysis":{
"analyzer":{
"symbol_smart":{
"type":"custom",
"char_filter":[],
"tokenizer":"punctuation",
"filter":[]
}
},
"tokenizer":{
"punctuation":{
"type":"pattern",
"pattern":"[.,!?]"
}
},
"char_filter":{},
"filter":{}
}
}
}
测试分词器
POST test_index2/_analyze
{
"analyzer": "symbol_smart",
"text": "心内科,心外科"
}
参考:
https://zhuanlan.zhihu.com/p/43437056
查询语句按照JSON格式映射
命令 | 说明 |
---|---|
from, size | 分页 |
match | 模糊查询 |
match_phrase | 段落匹配 |
term | 精确查询 |
terms | 多字段精确查询 |
bool | 多条件查询 |
query | 查询 |
filter | 过滤 必须满足 不计入得分 |
sort | 排序 |
should | 任意满足一个 |
GET index_name
GET index_name/_search
OR
GET index_name/_search
{
"query": {
"match_all": {}
}
}
每次只能有一个查询
GET /atlas_cloud_logs/_search
{
"from": 0,
"size": 2,
"_source": ["字段"],
"query": {
"match": {
"字段": "条件内容"
}
}
}
query 上下文的条件是用来给文档打分的,匹配越好 _score 越高;
filter 的条件只产生两种结果:符合与不符合,后者被过滤掉。
query 查询 计入得分
filter 必须满足 不计入得分
must 必须
should 或者
must_not 不等于
sort 排序 _score 查询分数
minimum_should_match 至少匹配多少should 字段
match 模糊查询
match_phrase 段落匹配 查询字段中包含查询内容mill
range 范围查询
gte 大于等于
lte 小于等于
e 等于
GET index_name/_search
{
"query": {
"bool": {
"filter": {
"range": {
"fieldName": {
"gte": 10,
"lte": 200
}
}
},
"match_phrase": { "address": "mill" }
}
},
"sort": [
{ "_score": "asc" }
],
"minimum_should_match": 1
}
GET /atlas_cloud_logs/_search
{
"size": 0,
"query": {
"match_all": {
}
},
"aggs": {
"聚合后返回的关键字": {
"terms": {
"field": "聚合字段.keyword"
}
}
}
}