docker 配置
1 |
|
data目录权限问题
1 |
|
解决 必须777 设置了privileged: true
并没有用证明官方docker傻逼
1 |
|
volume data迁移
不要用官方volume配置,数据库容量问题,目录定制,迁移都比较方便
1 |
|
es7.9注意事项
sql to dsl
index 配置
elasticsearch.yml
不能有index配置
1 |
|
只能通过curl配置,这里面就有个问题,用docker启动鬼知道他什么时候真启动。
1 |
|
数据类型
-
es整形支持到long int64,之前有些字段都是uint64的字段。
-
string 类型字段查询结果有些值查询不出来,甚至保存,字符串将默认被同时映射成text和keyword类型
1 |
|
Text:会分词,然后进行索引 支持模糊、精确查询 不支持聚合 (match*)
keyword:不进行分词,直接索引 支持模糊、精确查询 支持聚合 (term agg)
ignore_above
字符串长度>ignore_above的值,不会被索引(通过这个值查不到,聚合不了),但是可以保存。
对于长字符串,可以使用字符串数组(方便分词,ignore_above的值所用到数组的每个元素,而不是数组长度)
dynamic mapping 默认ignore_above: 256
keyword类型的最大支持的长度为32766个UTF-8类型的字符
## size
不设置size默认返回头10条数据
from=0 size=10 && from * size = 1w
返回值数量超过10000条
设置max_result_window
1 |
|
之后会遇到问题hits.total.value不准确
1 |
|
relation
= eq 总数是准的,突破max_result_window
或者agg
的时候relation
会变成gte
然后一直等于10000
如果必须精确知道命中的文档数量,track_total_hits=true
,(和query同级)如果命中的文档数量很大,会影响查询性能,而且会消耗大量的内存,甚至存在内存异常的风险。
agg size
使用agg的时候,使用hit的size=0
避免不必要的返回,一般集中解析aggregations部分
agg 返回所有可以使用默认10000 max_result_window
多重agg 使用默认100 max_inner_result_window
py
使用elasticsearch_dsl
连接and or
1 |
|
count
count(*) get result count only
1 |
|
1 |
|
count(distinct)
cardinality
1 |
|
select
select a,b , a > c
script_fields
1 |
|
select xx where order by limit
1 |
|
agg
普通group by
1 |
|
1 |
|
Composite-Aggregation
pagination + sorting + search+agg
1 |
|
bucket_sort可以排序分页,但只对父agg有效,排序只对agg过的字段有效 example:ordery by a
会报错
top_hits根据agg结果进行二次聚合等等,这里只选择想要的字段
1 |
|
random fucntion
1 |
|
update by query
1 |
|
delete by query
1 |
|
go
使用 github.com/olivere/elastic/v7
bulk
1 |
|
解析单个
1 |
|
select source 解析
1 |
|
agg
1 |
|
delete by query
1 |
|
insert struct model
1 |
|
update by query
1 |
|
update by script
1 |
|
scroll pagesize
1 |
|