1修改文档时候的并发问题
es7x后的版本中,_seq_no代表在特定分片中的序列号,_primary_term代表文档所在主分片的任期编号,修改文档的时候拿这两个作为条件就ok了。每修改一次,_seq_no就会+1。

2es中如何处理关联关系
1嵌套对象
允许对象数组中的对象被独立索引
构建映射时候:properties同级加上:"type":"nested"
查询的时候也要加上"nested"
缺点:每次更新会导致重新索引整个对象(包括根对象和嵌套对象)
注意:嵌套的时候不设置nested,es会对嵌套的数据进行扁平化处理。
2join父子文档类型
3宽表冗余存储
4业务端关联
3查询
跟query同级:
_source:查询哪些字段
sort:排序规则
from:起始页
size:条数
query子级:精确匹配(不分词)
term:精确匹配。不分词,会算分。term处理多值字段(数组),是包含,不是精确匹配。避免算分:外层加上constant_score和filter。
terms:多值匹配。terms只是匹配上自己中的一个值即可,但是如果必须全部匹配就需要使用bool must+多个term进行实现。
range:范围查询
exists:字段是否存在
ids:根据一组id查询
prefix:前缀匹配。不分词(不会对搜索的词分词),不会算分。场景:自动补全功能。最好搭配keyword类型。
wildcard:通配符
regexp:正则匹配
fuzzy:编辑距离的模糊查询。fuzziness:允许错误的字的数量,默认是0,1,2。
term set:能在多值字段中匹配个数
4es中的bool
- 如果整个查询没有 must /filter: should 默认要求至少匹配 1 条(minimum_should_match=1),必须命中其中一个;
- 如果外层 bool 存在 must /filter: should 变成「加分项,不强制匹配」,文档可以一条都不满足 should,照样能查出来。