03.ElasticSearch高级检索 2023-01-17 17:21 129阅读 0赞 ### ElasticSearch高级检索 ### * ElasticSearch高级检索 * * 检索方式( \_search) * * 使用语法 * 准备工作 * URL查询 * * * 1.查询所有(q=\*) * 2.按字段排序(sort) * 3.分页查询(from&size) * 4.返回指定字段的查询结果(source) * DSL查询 * * * 1.查询所有(match\_all) * 2.返回指定条数(size) * 3.分页查询(from&size) * 4.查询的结果集中返回指定字段(\_source) * 5.关键字查询(term) * 6.范围查询(range) * 7.前缀查询(prefix) * 8.通配符查询(wildcard) * 9.多id查询(ids) * 10.模糊查询(fuzzy) * 11.布尔查询(bool) * 12.高亮查询(highlight) * 13.多字段查询(multi\_match) * 14.多字段分词查询(query\_string) # ElasticSearch高级检索 # ## 检索方式( \_search) ## ES官方提供了两中检索方式:**一种是通过 URL 参数进行搜索,另一种是通过 DSL(Domain Specified Language) 进行搜索**。**官方更推荐使用第二种方式第二种方式是基于传递JSON作为请求体(request body)格式与ES进行交互,这种方式更强大,更简洁**。 ![在这里插入图片描述][20210428172712326.png_pic_center] ### 使用语法 ### **URL查询**: GET /索引/类型/\_search?参数 **DSL查询**: GET /索引/类型/\_search \{\} ## 准备工作 ## 开始高级检索之前先来准备一下测试数据 1.删除索引 DELETE /christy 2.创建索引、映射与类型 PUT /christy { "mappings": { "user":{ "properties":{ "name":{ "type":"text" }, "age":{ "type":"integer" }, "bir":{ "type":"date" }, "introduce":{ "type":"text" }, "address":{ "type":"keyword" } } } } } 3.批量插入数据 PUT /christy/user/_bulk { "index":{ }} { "name":"Christy","age":20,"bir":"2001-01-01","introduce":"不要求很帅,像我这样就可以了","address":"京师"} { "index":{ }} { "name":"Tide","age":23,"bir":"1998-09-08","introduce":"魔镜魔镜谁是世界上最美的女人","address":"开封"} { "index":{ }} { "name":"hardy","age":5,"bir":"2016-02-12","introduce":"调皮捣蛋我最行","address":"杭州"} { "index":{ }} { "name":"Tom","age":18,"bir":"2003-12-12","introduce":"Jerry是我最好的朋友","address":"纽约"} { "index":{ }} { "name":"Jerry","age":6,"bir":"2015-10-10","introduce":"没有Tom的日子我真的好难过","address":"华盛顿"} { "index":{ }} { "name":"布什","age":3,"bir":"2018-11-10","introduce":"我不是美国的那个总统,我只是一条普拉多,没有骂人的意思","address":"华盛顿"} ## URL查询 ## #### 1.查询所有(q=\*) #### **语法:**`GET /index/type/_search?q=*`。例如我想查询索引`Christy`下`user`类型的所有数据,可以这么写: `GET /christy/user/_search?q=*` ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70] 上述结果可以看到该指令成功返回了查询结果,也符合我们的预期。对于返回结果中每个字段的意思如下图 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 1] #### 2.按字段排序(sort) #### **语法:**`GET /index/type/_search?q=*&sort=fileName`。比如上面查询出所有结果之后按年龄来排序,应该像下面这样: `GET /christy/user/_search?q=*&sort=age` ![在这里插入图片描述][20210428172833599.gif] #### 3.分页查询(from&size) #### **语法:**`GET /index/type/_search?q=*&sort=fileName&size=count&from=(pageNumber-1)*size`。例如:我想取出按年龄排序后结果中的前两天数据,应该像下面这样写 `GET /christy/user/_search?q=*&sort=age&size=2&from=0` ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 2] #### 4.返回指定字段的查询结果(source) #### **语法:**`GET /index/type/_search?q=*&size=1&from=0&_source=filedName1,...`。这个意思就是不需要返回每条记录的所有字段信息,比如我只想查询并返回用户的姓名和年龄,那么可以像下面这样写: `GET /christy/user/_search?q=*&size=1&from=0&_source=name,age` ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 3] 根据查询的返回结果我们可以看到只返回了我们定义的**name**和**age**两个字段的值 ## DSL查询 ## > DSL查询是官方推荐的查询方式,相比较与URL,DSL能够根据更复杂的条件来查询,也是需要重点掌握的查询方式 #### 1.查询所有(match\_all) #### GET /christy/user/_search { "query": { "match_all": { } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 4] #### 2.返回指定条数(size) #### GET /christy/user/_search { "query": { "match_all": { } }, "size": 2 } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 5] #### 3.分页查询(from&size) #### GET /christy/user/_search { "query": { "match_all": { }}, "size": 2, "from": 1 } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 6] > from是从0开始的,上面的分页中我们从1开始取两条,就将第一条用户christy的数据给过滤掉了,返回结果的第一条数据应该是用户Tide #### 4.查询的结果集中返回指定字段(\_source) #### GET /christy/user/_search { "query": { "match_all": { }}, "size": 2, "from": 1, "_source":["name","age"] } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 7] 通过返回结果我们可以看到在上面分页结果的基础上只返回用户的name和age也是没有问题的。这里要注意的是**命令中\_source的参数是以数组的方式传递的** #### 5.关键字查询(term) #### GET /christy/user/_search { "query": { "term": { "address": { "value": "开封" } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 8] > **NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词**。 > > **NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词**,**只有text类型分词**。 上面两条NOTE是什么意思呢?标准分词器将type类型为text的字段值分词后,只能按照单个汉字或者英文单词来查询,否则查询不到数据;比如我们测试数据的`name`类型是**text**,其中有一条名字叫做"布什"的普拉多,我们这个时候直接搜索**布什**是什么都搜索不到的,但是搜索单个的**布**或者**什**是可以找到这只可爱的普拉多的,就像下图演示的一样 ![在这里插入图片描述][20210428173131262.gif] #### 6.范围查询(range) #### GET /christy/user/_search { "query": { "range": { "age": { "gte": 8, "lte": 30 } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 9] 上面我们看到的`gte`和`lte`分别是`大于等于`和`小于等于`的意思,上面的命令查询的是**年龄大于等于8岁并且小于等于30岁的用户**。如果需要查询大于8岁并且小于30岁的用户我们只需要把gte和lte改成gt和lt就行了; #### 7.前缀查询(prefix) #### GET /christy/user/_search { "query": { "prefix": { "content": { "introduce": "最" } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 10] > 前缀查询关键字prefix用来检索含有指定前缀关键字的相关文档。比如上面我们查询**introduce**字段包含`最`的用户。 #### 8.通配符查询(wildcard) #### 通配符查询关键字wildcard说明: `?`:用来匹配一个字符 `*`:用来匹配任意多个字符 GET /christy/user/_search { "query": { "wildcard": { "introduce": { "value": "jerr*" } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 11] > NOTE:我们目前还没有配置分词器,ES用的是自带的标准分词器,一个汉字一个词,所以这里通配符查询不能测试汉字,只能测试英文。 #### 9.多id查询(ids) #### 顾名思义,多id查询就是可以根据多个记录的id来查询多条记录。这个一般都是在实际应用中查询多个记录列表或者详情 GET /christy/user/_search { "query": { "ids": { "values": ["OKEuB3kBVQPOYI_dp2GY","PKEuB3kBVQPOYI_dp2GY"] } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 12] #### 10.模糊查询(fuzzy) #### # fuzzy 模糊查询 最大模糊错误 必须在0-2之间 # 搜索关键词长度为 2 不允许存在模糊 0 # 搜索关键词长度为3-5 允许一次模糊 0 1 # 搜索关键词长度大于5 允许最大2模糊 GET /christy/user/_search { "query": { "fuzzy": { "introduce":"jerry" } } } **首先,我们先演示第一种情况:搜索关键词长度为2,不允许存在模糊** ![在这里插入图片描述][20210428173249196.gif] > address的类型是`keyword`不分词,我们输入**京师**是可以查到数据的,但是我们输入**京湿**是**查询不到的** **现在我们来演示第二种情况:搜索关键字长度3-5,最大只允许一个模糊字符** ![在这里插入图片描述][202104281733025.gif] > 按照`introduce`查找**jerry**是可以查询到数据的,我们改错一个字符也没有问题,但是改错两个字符就不行了 最后我们来演示最后一种情况,搜索关键字大于5时,最大只允许模糊两个字符,为此我们先准备一条数据 PUT /christy/user/_bulk { "index":{ }} { "name":"ElasticSearch","age":20,"bir":"2001-01-01","introduce":"ElasticSearch是最牛逼的搜索的引擎","address":"china"} 然后我们就以`elasticsearch`为搜索关键字进行查询 ![在这里插入图片描述][20210428173314615.gif] 效果如上图,这里就不解释了 #### 11.布尔查询(bool) #### bool关键字用来组合多个条件实现复杂查询,这也是bool查询的强大之处 `must`:相当于&&,同时成立 `should`:相当于||,满足一个条件就行 `must_not`:相当于!,不能满足任何一个 GET /christy/user/_search { "query": { "bool": { "must": [ { "range": { "age": { "gte": 0, "lte": 30 } } } ], "must_not": [ { "wildcard": { "introduce": { "value": "jerr*" } }} ], "should": [ { "term": { "age": { "value": "20" } } }, { "term": { "introduce": { "value": "tom" } } } ] } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 13] #### 12.高亮查询(highlight) #### 高亮关键字highlight可以让符合条件的文档中的关键字高亮,类似于下面这样 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 14] GET /christy/user/_search { "query": { "term": { "introduce": { "value": "elasticsearch" } } }, # highlight不是直接对结果进行高亮,而是对结果二次渲染高亮 "highlight": { # fields意思是对哪些字段匹配出来的结果进行高亮,虽然我们上面是查询introduce里面的elasticsearch,但是如果我们其他的字段比如‘name’中也有elasticsearch或者其他字段中也有,并且我们也希望高亮,那么我们像下面这样写成*即可 "fields": { "*": { } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 15] > 查询结果我们也看到了,ES确实将查询出来的关键字特别处理了,前后加上了,这是斜体的意思,如果我们想实现百度的那种加红处理,需要自定义`pre_tags`和`post_tags` > > 有人说上面的测试结果只把`introduce`里面查询出来的结果高亮了,`name`里面的没有高亮啊?那是因为没有加上`require_field_match`这个属性,他的意思是是否只开启查询字段高亮。属性值必须设置成**false**才能针对所有字段高亮 GET /christy/user/_search { "query":{ "term":{ "introduce":"elasticsearch" } }, "highlight": { "pre_tags": ["<span style='color:red'>"], "post_tags": ["</span>"], "require_field_match":false, "fields": { "*":{ } } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 16] #### 13.多字段查询(multi\_match) #### GET /christy/user/_search { "query": { "multi_match": { "query": "tom", "fields": ["name","introduce"] #这里写要检索的指定字段 } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 17] **多字段查询需要注意** 1.如果搜索的字段分词,他会对query进行先分词,后查询 2.如果搜索的字段部分词,他会直接使用query字符串整体进行搜索 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 18] 我们使用`tom纽约`进行搜索,由于`introduce`是**text**类型的,他是分词的;`address`是**keyword**类型的部分词,所以在搜索introduce的时候**先对query进行分词,而查询address的时候不分词,直接使用整体进行查询**。所以在使用多字段查询的时候,查询的字段最好是分词的字段 #### 14.多字段分词查询(query\_string) #### **多字段分词查询**顾名思义可以对**查询关键字**进行分词,而且可以指定分词器,就是这样一个牛逼的存在 GET /christy/user/_search { "query": { "query_string": { "default_field": "introduce", "query": "tom和jerry" } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 19] 当然们也可以像下面这样写 GET /christy/user/_search { "query": { "query_string": { "fields": ["address","introduce"], "query": "tom和jerry" } } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 20] 这就实现了一个类似上面我们说的多字段查询。上面我们也说了这个可以指定分词器,可以像下面这样 GET /christy/user/_search { "query": { "query_string": { "fields": ["address","introduce"], "query": "jerry华盛顿", "analyzer": "ik_max_word" } } } 这里我们除了标准分词器还没有安装其他分词器,上面我们提到的`ik_max_word`下节我们再讲<(* ̄▽ ̄*)/ [20210428172712326.png_pic_center]: /images/20221021/e32a16e3042844db86a96e51a165cecf.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70]: /images/20221021/24eb0ece52fe49d2be75e08d8f5559d1.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 1]: /images/20221021/8a0bc8e0fa714c68916b88bd41d7bcad.png [20210428172833599.gif]: /images/20221021/3f79ece5c6924b2ba287014c47dc60be.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 2]: /images/20221021/d9d5e78290454f4d8685260c23b8cfa8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 3]: /images/20221021/624462db8d1a4bff91941c0239003ab0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 4]: /images/20221021/cc5019792b764cc3bcc230fb12c028e6.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 5]: /images/20221021/52a138aad4ab46a897bec2f890807195.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 6]: /images/20221021/8e70c3f77b5640a7a2688ec9df767284.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 7]: /images/20221021/426453c4d4a0412690c1ed618ab4e8c4.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 8]: /images/20221021/3932c9712cf14236bdc97c00f7d7aff4.png [20210428173131262.gif]: /images/20221021/2323f9bb79424fe4a40f7481e4104423.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 9]: /images/20221021/4881fe280abd490e9cf0041950fba641.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 10]: /images/20221021/f226763248104142b9f0ded786b25d9d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 11]: /images/20221021/0471e788a77a404ab44a8a5876c120c3.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 12]: /images/20221021/6d6765cc854640569d3232f97365e4ff.png [20210428173249196.gif]: /images/20221021/010af9a0016f4e5194b31af554b28132.png [202104281733025.gif]: /images/20221021/0519af294c6e4253a8db0883fc52d766.png [20210428173314615.gif]: /images/20221021/9f1d277cf2574125984e69a1ee0af141.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 13]: /images/20221021/1b9439ec259b4ed7bca0058b41402f57.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 14]: /images/20221021/ca71e8a8d5f04fd2b5225ed18fcbbc62.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 15]: /images/20221021/b4e44d86ccf046038a4a4415e1a8a933.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 16]: /images/20221021/36bf17166fff44ddae6af9967a078b5c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 17]: /images/20221021/c5a9f65db83849eca9365492a84bad20.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 18]: /images/20221021/3b87febd7cf14835b977f266122ada43.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 19]: /images/20221021/fd083ce6e1554e73927b7875a1e88906.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JieHlscWYxMjZjb20_size_16_color_FFFFFF_t_70 20]: /images/20221021/419cacaca47443cebdc2efd165f421eb.png 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 ElasticSearch高级特性 文章目录 ElasticSearch 分布式特性 一、ES节点介绍 1.ES分布式特性 逃离我推掉我的手/ 2022年03月29日 21:49/ 0 赞/ 309 阅读
相关 Elasticsearch如何检索数据 我们都知道Elasticsearch是一个全文检索引擎,那么它是如何实现快速的检索呢? 传统的数据库给每个字段都存储成一个单个值,对于全文检索而言,这样的存储是低效的 布满荆棘的人生/ 2022年04月06日 20:30/ 0 赞/ 113 阅读
相关 Elasticsearch 检索技术 [https://blog.csdn.net/laoyang360/article/category/6239824][https_blog.csdn.net_laoyang3 深碍√TFBOYSˉ_/ 2022年05月14日 00:23/ 0 赞/ 72 阅读
相关 JavaScript高级-03_对象高级 对象的创建模式 Object构造函数模式 var obj = {}; obj.name = 'Tom' o 拼搏现实的明天。/ 2022年05月17日 10:36/ 0 赞/ 99 阅读
相关 Elasticsearch学习--索引快速检索 如何快速检索? Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为 - 日理万妓/ 2022年05月24日 12:08/ 0 赞/ 121 阅读
相关 Elasticsearch如何检索数据 我们都知道Elasticsearch是一个全文检索引擎,那么它是如何实现快速的检索呢? 传统的数据库给每个字段都存储成一个单个值,对于全文检索而言,这样的存储是低效的。举个例 布满荆棘的人生/ 2022年05月29日 09:52/ 0 赞/ 100 阅读
相关 elasticsearch的实现全文检索 转自:[http://zhaoyanblog.com/archives/495.html][http_zhaoyanblog.com_archives_495.htm 清疚/ 2022年08月05日 10:48/ 0 赞/ 116 阅读
相关 通过 Elasticsearch 实现聚合检索 目录 [1 普通聚合分析][1] [1.1 直接聚合统计][1.1] [1.2 先检索, 再聚合][1.2 _] [ 超、凢脫俗/ 2022年09月08日 14:19/ 0 赞/ 46 阅读
相关 Elasticsearch分布式检索原理笔记 目录 ES检索的两阶段过程 查询阶段 取回阶段 深分页问题 scroll search\_after -------------------- ES检索的两 曾经终败给现在/ 2022年10月24日 13:51/ 0 赞/ 66 阅读
相关 03.ElasticSearch高级检索 ElasticSearch高级检索 ElasticSearch高级检索 检索方式( \_search) 使用语法 准备 我会带着你远行/ 2023年01月17日 17:21/ 0 赞/ 130 阅读
还没有评论,来说两句吧...