@zh350229319
2019-05-27T02:11:44.000000Z
字数 2340
阅读 642
ElasticSearch
elastic默认索引类型如下,查询时可以使用fieldName或fieldName.keyword查询,浪费存储空间,需要改成特定需要的类型。
"fieldName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}
| Java类型 | ElasticSearch类型 |
|---|---|
| int | integer |
| long | long |
| float | float |
| double | double |
| char | keyword |
| boolean | boolean |
| String | keyword/text |
| DateTime | date |
数字类型:根据实际的数据范围选择合适的类型,具体参考Numeric
keyword 使用建议:较短的字段查询,支持term、prefix、wildcard,其中prefix和wildcard在文本种类量大时,存在查询性能问题。默认查询256字符
text 使用建议:较长的字段查询,分词场景,支持match
date 使用建议:按照以下格式定义
"dateField": {"type": "date","format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}
索引结构:保留keyword类型保存原文
"fieldName": {"type": "keyword","words": {"type": "text","analyzer": "ngramIndexAnalyzer"}
使用前缀查询时使用
#索引结构定义PUT {INDEX_PAATERN}{"index": {"analysis": {"filter": {"edge_ngram_filter": {"type": "edge_ngram","min_gram": 1,"max_gram": 50 # 前缀最大匹配数}},"analyzer": {"ngramIndexAnalyzer": {"type": "custom","tokenizer": "keyword","filter": ["edge_ngram_filter", "lowercase"]}}}}}# 查询条件"term": {"fieldName.words": {"value": "湖北"}}
doc_value和norms设置比较常用
- "doc_value":false
sort、aggregate、script将无法使用,可以节省磁盘空间
- "norms":false
text 字段不需要评分时可以关闭
- "index":false
当字段需要 histograms 不需要 filter 时,可以禁用映射
- "index_options":freqs
text 字段也默认存储索引中的频率和位置。频率用于计算分数,位置用于运行短语查询(phrase queries)。 如果不需要运行短语查询时可以设置。
- 禁用 _all 字段
_all 字段是由所有字段拼接成的超级字段,如果在查询中已知需要查询的字段,就可以考虑禁用它。
优先使用 scroll 方式分页查询
因为使用 from to 方式查询性能很低,Elastic限制了最大翻页结果数。如果一定需要开启可以添加以下配置
PUT {INDEX_PAATERN}/_settings{"index":{"max_result_window":100000000}}
适合新增数据查询实时性要求低的索引
PUT {INDEX_PAATERN}/_settings{"index.refresh_interval" : "30s"}
GET _nodes/thread_pool 可以查看默认的配置
调整 elasticsearch.yml ,对 bulk/flush 线程池进行调优
threadpool.bulk.size:8 #(CPU核数)threadpool.flush.size:8 #(CPU核数)````<div class="md-section-divider"></div>## 配置优化<div class="md-section-divider"></div>### 设置 JVM 堆大小内存 < 64G:JVM 设置为内存的一半,最大 31G内存 >= 64G:设置为 31G<div class="md-section-divider"></div>
-Xms31g
-Xmx31g
<div class="md-section-divider"></div>### 关闭 SWAP可以关闭系统SWAP或者修改以下配置<div class="md-section-divider"></div>
bootstrap.memory_lock: true
```