diff --git a/ch6-cloud/ch6-x-dist-search-engine.md b/ch6-cloud/ch6-x-dist-search-engine.md index 583f6c3..35c5f70 100644 --- a/ch6-cloud/ch6-x-dist-search-engine.md +++ b/ch6-cloud/ch6-x-dist-search-engine.md @@ -83,6 +83,52 @@ func equal() { } ``` -就算文档总数很多,但我们的搜索词的倒排列表不长时,搜索速度也是很快的。如果用关系型数据库,那就需要按照索引(如果有的话)来慢慢扫描了。 +时间复杂度分析 TODO + +在整个算法中起决定作用的一是最短的倒排列表的长度,其次是词数总和,一般词数不会很大(想像一下,你会在搜索引擎里输入几百字来搜索么?),所以起决定性作用的,一般是所有倒排列表中,最短的那一个的长度。 + +因此,文档总数很多的情况下,搜索词的倒排列表最短的那一个不长时,搜索速度也是很快的。如果用关系型数据库,那就需要按照索引(如果有的话)来慢慢扫描了。 ### 查询 DSL + +es 定义了一套查询 DSL,当我们把 es 当数据库使用时,需要用到其 bool 逻辑。举个例子: + +```json +{ + "query": { + "bool": { + "must": [{ + "match": { + "field_1": { + "query": "1", + "type": "phrase" + } + } + }, { + "match": { + "field_2": { + "query": "2", + "type": "phrase" + } + } + }, { + "match": { + "field_3": { + "query": "3", + "type": "phrase" + } + } + }, { + "match": { + "field_4": { + "query": "4", + "type": "phrase" + } + } + }] + } + }, + "from": 0, + "size": 1 +} +```