摘要:
ElasticSearch的Index底层结构 ES中,index 由多个shard组成。每个shard,实际上是一个Lucene index。 在Lucene中,它的每个index,由多个segment组成。每个segment内部,实际上是若干个倒排索引。 ES数据写入的流程: (1)每当有一个d 阅读全文
摘要:
搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用 doc 阅读全文
摘要:
创建自定义分词器 测试分词器 DELETE /test_analyzer PUT /test_analyzer { "settings": { "analysis": { "char_filter": { "sign_to_word": { "type": "mapping", "mappings" 阅读全文
摘要:
默认:标准分词器standard,会把一句话,按英文空格分词。 standard tokenizer:以单词边界进行切分 standard token filter:什么都不做 lowercase token filter:将所有字母转换为小写 stop token filer(默认不移除):移除停 阅读全文
摘要:
使用scroll滚动搜索: 比如全文搜索10万条数据,不能一次全搜出来返回,太耗时了。通常是一批一批的获取结果,滚动搜索 1. 第一次搜索时,会生成这批数据的快照,下次再搜的时候,基于此快照进行搜索 2. 在scroll快照生效期间,发生的数据变更,不会被搜到(数据不一致) 3. 尽量不要用相关度评 阅读全文
摘要:
Scroll的用法: 第一次搜的时候,要指定 快照保留时间1min,分页的大小:2条/页; 对于第一次搜索,ES会返回一个这个scroll的id; 下次再搜的时候,就带着这个scrollid去搜就行了,不用再指定size和搜索条件了 GET /beauties/my/_search?scroll=1 阅读全文
摘要:
一、 对象存储 下图中的 Address就是嵌套对象 查看它的mapping,可以看到address有自己的属性 实际存储: { "Name":"Qi Wei", "Age":22, "Address.Country":"China", "Address.Province":"Sichuan", " 阅读全文
摘要:
只能在index里的field不存在的时候,才能指定新field的数据类型,field有数据后,就不能再修改field的类型了 可创建的类型如下: integer double date text/string analyzed 分词(默认) not_analyzed 不分词 no 不索引 创建各种 阅读全文
摘要:
查看 某个index下所有type的mapping GET /beauties/_mapping 查看 指定index、指定type的mapping GET /beauties/_mapping/cn 阅读全文
摘要:
指定某个字段,必须要包含XX字符 GET /beauties/my/_search?q=Name:Chang Wei 搜出 某个字段不包含XX字符 的所有内容 GET /beauties/my/_search?q=-Name:Ruru (搜索结果中,Name都不包含Ruru) 不管哪个字段,只要包含 阅读全文
摘要:
默认的search,是没有时间限制的。比如,一个search,可能要10分钟才能搜完,那么,es就会等10分钟,直到结果出来。 然而,在某些场景下,客户是等不了10分钟的。比如,电商网站,客户宁可等待1秒钟,得到100条结果,也不愿意等10分钟,看到10000条结果。 所以,我们会在search上指 阅读全文
摘要:
搜索所有index(慎用): GET /_search 搜一个索引下,所有type,(不指定type即可) GET /beauties/_search 搜多个索引,则多个索引间,用逗号(,)分隔开 GET /beauties,test_index/_search 使用通配符,搜索所有匹配的index 阅读全文
摘要:
回顾: bulk的语法要求:每个json串都不能换行,不同json串之间,必须换行 为什么不用标准json数组呢?如: [ { "create":{...} }, { "update":{...}s } ] 因为,如果使用这种Json数组,ES需要做的是 把字符串转成 Json数组对象 按每个Jso 阅读全文
摘要:
注意:当执行多条数据查询、增删改时,一定要用mget、bulk,提升性能,减少网络传输 mget 回顾:查询单个文档 GET /beauties/my/2 mget 查询多个文档: 不同 index、不同type、不同id GET /_mget { "docs":[ { "_index":"beau 阅读全文
摘要:
Partial Update 内部执行过程: 首先,ES文档是不可变的,它们只能被修改,不能被替换。Update Api 也不例外。 Update API 简单使用与之前描述相同的 检索-修改-重建索引(reindex) 的处理过程。 区别在于这个过程发生在分片内部。 相当于ES的Shard内部 执 阅读全文
摘要:
ES有内置的Groovy脚本执行内核,可以在命令的Json内嵌入Groovy脚本语句 前提数据: 让 num 加 10. POST /test_index/test_type/1/_update { "script":"ctx._source.num+=10" } 把Groovy脚本(含参数)保存在 阅读全文
摘要:
ES是基于乐观锁进行并发控制的。 如果有并发的业务场景,可以直接使用ES内置乐观锁机制。 使用的时候,java程序需要先Get指定的记录,获取到版本号,然后Put的时候,带着该版本号,请求更新。 ES只有判断到 该记录的 version = 请求中的version值 时,才能进行更新。如果不相等,则 阅读全文
摘要:
查索引内所有文档记录 GET /beauties/my/_search GET /beauties/my/_search { "query":{ "match_all": {} } } 匹配、排序 GET /beauties/my/_search { "query": { "match": { "N 阅读全文
摘要:
文档更新原理: PUT 一条数据的时候,如果是全量替换,ES并不会覆盖原来的文档,而是新创建一个文档,并将version+1,原文档标记为deleted,不会立刻物理删除。ES会在集群的deleted文档越来越多的时候,集中把它们物理删掉,以释放空间。 阅读全文
摘要:
检查集群健康状态,可以看集群颜色。(黄色:primary shard都正常,replica不正常) GET /_cat/health?v 列出集群所有index GET /_cat/indices?v GET _cluster/health PUT一条数据:如果指定文档不存在则创建,存在则全量替换。 阅读全文