- 优化
- 配置
- 创建
- 查询
- 命令
- 字段类型
- 创建
- 添加数据
- 修改索引
- 打开/关闭索引
- 删除
- 自定义分词器
- 查询
- 命令说明
- 查询索引Mapping(结构)
- 查全部 match_all
- 单条件查询
- Bool多条件查询
- 聚合查询 Aggregation
-
当机器内存小于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的性能。
- 不需要分词的字段,统一设置成keyword,降低索引存储大小
- 尽量使用term、filter等精确查询
- 尽量不使用聚合查询aggs
-7.x中的type已经过时,默认设置为_doc
所有的命令都为大写
添加数据可以在自动索引生成之后,先查询Mapping,在Mapping的基础上进行修改索引的字段
规范:数据中String不需要进行分词的,type必须设置为keyword
- settings: 用来设置分片,副本等配置信息(自定义分词器)
- mappings: 字段映射,类型等
- properties: 由于type在后续版本中会被Deprecated, 所以无需被type嵌套
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格式映射
命令说明GET index_name查全部 match_all
GET index_name/_search OR GET index_name/_search { "query": { "match_all": {} } }单条件查询
每次只能有一个查询
- from size 指定查询条数,类似于sql的分页
- _source 限制返回的字段 _source
GET /atlas_cloud_logs/_search { "from": 0, "size": 2, "_source": ["字段"], "query": { "match": { "字段": "条件内容" } } }Bool多条件查询
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 }聚合查询 Aggregation
GET /atlas_cloud_logs/_search { "size": 0, "query": { "match_all": { } }, "aggs": { "聚合后返回的关键字": { "terms": { "field": "聚合字段.keyword" } } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)