0%

对象和 Nested 对象具有每次更新,需要重新索引整个对象(包括根对象和嵌套对象)的局限性。ES 提供了类似关系型数据库中 join 的实现。使⽤ join 数据类型实现,可以通过维护 Parent / Child 的关系,从⽽分离两个对象,满足:

  • ⽗⽂档和⼦⽂档是两个独⽴的⽂档
  • 更新⽗⽂档⽆需重新索引⼦⽂档。⼦⽂档被添加,更新或者删除也不会影响到⽗⽂档和其他的⼦⽂档
阅读全文 »

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-nested-query.html

真实世界中有很多重要的关联关系,比如银⾏账户有多次交易记录或者目录⽂件有多个⽂件和⼦⽬录。

范式化设计 (Normalization) 的主要目标是“减少不必要的更新”,数据库越范式化,就需要 Join 越多的表,因此⼀个完全范式化设计的数据库会经常⾯临 “查询缓慢”的问题。范式化简化了更新,但是数据“读”取操作可能更多。

阅读全文 »

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations-bucket-terms-aggregation.html

1. 分布式系统的近似统计算法

在分布式系统中,数据量、精确度和实时性三个指标只能同时满足其中两个。比如在数据量比较大的情况下,为了保证数据的实时性,那么就需要采用近似计算来提高实时性从而丢失了数据的精确度。

阅读全文 »

1. 并发控制的必要性

两个 Web 程序同时更新某个⽂档,如果缺乏有效的并发,会导致更改的数据丢失。ES 采⽤的是乐观并发控制,即假定冲突是不会发⽣的,不会阻塞正在尝试的操作。如果数据在读写中被修改,更新将会失败。应⽤程序决定如何解决冲突,例如重试更新,使⽤新的数据,或者将错误报告给⽤户。

阅读全文 »

1. From / Size

默认情况下,查询按照相关度算分排序,返回前 10 条记录。From 指明开始位置,Size 指明期望获取⽂档的总数。例如:

1
2
3
4
5
6
7
8
POST tmdb/_search
{
"from": 0,
"size": 5,
"query": {
"match_all": { }
}
}
阅读全文 »

相关阅读:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-suggesters.html

1. 搜索建议

现代的搜索引擎,⼀般都会提供 Suggest as you type 的功能。以帮助⽤户在输⼊搜索的过程中,进⾏⾃动补全或者纠错。通过协助⽤户输⼊更加精准的关键词,提⾼后续搜索阶段⽂档匹配的程度。

阅读全文 »